Rugalmas adatbázis-ügyfélkódtár használata a Dapperrel
A következőre vonatkozik: Azure SQL Database
Ez a dokumentum olyan fejlesztők számára készült, amelyek a Dapperre támaszkodnak az alkalmazások létrehozásához, de rugalmas adatbázis-eszközöket is szeretnének használni az adatréteg horizontális felskálázásához horizontális horizontális felskálázást megvalósító alkalmazások létrehozásához. Ez a dokumentum bemutatja a Dapper-alapú alkalmazások azon változásait, amelyek a rugalmas adatbázis-eszközökkel való integrációhoz szükségesek. A célunk a rugalmas adatbázis-szegmenskezelés és az adatfüggő útválasztás összeállítása a Dapperrel.
Mintakód: Rugalmas adatbázis-eszközök az Azure SQL Database-hez – Dapper-integráció.
A Dapper és a DapperExtensions könnyen integrálható az Azure SQL Database rugalmas adatbázis-ügyfélkódtárával. Az alkalmazások adatfüggő útválasztást használhatnak, ha módosítják az új Sql Csatlakozás ion-objektumok létrehozását és megnyitását, hogy az ügyféltárból érkező Open Csatlakozás ionForKey hívást használják. Ez az alkalmazás módosításait csak az új kapcsolatok létrehozására és megnyitására korlátozza.
A Dapper áttekintése
A Dapper egy objektum-relációs mapper. .NET-objektumokat képez le az alkalmazásból egy relációs adatbázisba (és fordítva). A mintakód első része bemutatja, hogyan integrálható a rugalmas adatbázis-ügyfélkódtár a Dapper-alapú alkalmazásokkal. A mintakód második része bemutatja, hogyan integrálható a Dapper és a DapperExtensions használatakor.
A Dapper leképező funkciója bővítménymetelyeket biztosít az adatbázis-kapcsolatokhoz, amelyek leegyszerűsítik a T-SQL-utasítások küldését az adatbázis végrehajtásához vagy lekérdezéséhez. A Dapper például megkönnyíti a .NET-objektumok és az SQL-utasítások paraméterei közötti leképezést a hívások végrehajtásához, vagy az SQL-lekérdezések eredményeit .NET-objektumokba használja a Dapper lekérdezéshívásaival.
A DapperExtensions használatakor már nem kell megadnia az SQL-utasításokat. Az olyan bővítmények, mint a GetList vagy a Beszúrás az adatbázis-kapcsolaton keresztül, a színfalak mögött hozzák létre az SQL-utasításokat.
A Dapper és a DapperExtensions másik előnye, hogy az alkalmazás szabályozza az adatbázis-kapcsolat létrehozását. Ez segít kezelni a rugalmas adatbázis-ügyfélkódtárat, amely a szegmensek adatbázisokhoz való leképezése alapján közvetíti az adatbázis-kapcsolatokat.
A Dapper szerelvények beszerzéséhez lásd a Dapper ponthálót. A Dapper-bővítményekért lásd : DapperExtensions.
A rugalmas adatbázis ügyfélkódtárának gyors pillantása
A rugalmas adatbázis-ügyfélkódtár segítségével definiálhatja az alkalmazásadatok partícióit shardletek néven, leképezheti őket adatbázisokhoz, és skálázási kulcsokkal azonosíthatja őket. Annyi adatbázissal rendelkezhet, amennyit csak szeretne, és eloszthatja a szegmenseket ezeken az adatbázisokon. A skálázási kulcsértékek adatbázisokhoz való leképezését a kódtár API-k által biztosított szegmenstérkép tárolja. Ezt a képességet szegmenstérkép-kezelésnek nevezzük. A szegmenstérkép adatbázis-kapcsolatok közvetítőjeként is szolgál a szilánkkulcsot tartalmazó kérések esetében. Ezt a képességet adatfüggő útválasztásnak nevezzük.
A szegmenstérkép-kezelő megvédi a felhasználókat az inkonzisztens nézetektől olyan szegmensadatokká, amelyek akkor fordulhatnak elő, ha egyidejű shardletkezelési műveletek történnek az adatbázisokon. Ehhez a szegmens leképezi a kódtárral létrehozott alkalmazás adatbázis-kapcsolatait. Ha a szegmenskezelési műveletek hatással lehetnek a szegmensekre, ez lehetővé teszi, hogy a szegmensleképezési funkció automatikusan megöljön egy adatbázis-kapcsolatot.
AHelyett, hogy hagyományos módon hoz létre kapcsolatokat a Dapperhez, az Open Csatlakozás ionForKey metódust kell használnia. Ez biztosítja, hogy az összes ellenőrzés lezajljon, és a kapcsolatok megfelelően legyenek kezelve, amikor az adatok a szegmensek között mozognak.
A Dapper-integráció követelményei
A rugalmas adatbázis-ügyfélkódtár és a Dapper API-k használatakor a következő tulajdonságokat kell megőriznie:
- Horizontális felskálázás: Az alkalmazás kapacitásigényéhez szükséges módon szeretnénk adatbázisokat hozzáadni vagy eltávolítani a horizontálisan tagolt alkalmazás adatrétegéből.
- Konzisztencia: Mivel az alkalmazást horizontális felskálázással skálázták fel, adatfüggő útválasztást kell végrehajtania. Ehhez a kódtár adatfüggő útválasztási képességeit szeretnénk használni. Különösen a szegmenstérkép-kezelőn keresztül közvetített kapcsolatok által biztosított érvényesítési és konzisztencia-garanciákat szeretné megőrizni, hogy elkerülje a sérülést vagy a helytelen lekérdezési eredményeket. Ez biztosítja, hogy a rendszer elutasítsa vagy leállítja egy adott szegmens kapcsolatait, ha (például) a szegmens jelenleg egy másik szegmensbe van áthelyezve felosztási/egyesítési API-k használatával.
- Objektumleképezés: Meg szeretnénk őrizni a Dapper által biztosított leképezések kényelmét az alkalmazás osztályai és az alapul szolgáló adatbázis-struktúrák közötti fordításhoz.
Az alábbi szakasz útmutatást nyújt a Dapper és a DapperExtensions alapú alkalmazásokra vonatkozó követelményekhez.
Technikai útmutató
Adatfüggő útválasztás a Dapperrel
A Dapper esetében az alkalmazás általában a mögöttes adatbázis kapcsolatainak létrehozásáért és megnyitásáért felelős. Ha az alkalmazás T típusú, a Dapper t típusú .NET-gyűjteményként adja vissza a lekérdezési eredményeket. A Dapper elvégzi a T-SQL eredménysorok és a T típusú objektumok leképezését. Hasonlóképpen, a Dapper a .NET-objektumokat SQL-értékekké vagy paraméterekké alakítja az adatmanipulációs nyelv (DML) utasításaihoz. A Dapper ezt a funkciót az ADO .NET SQL-ügyfélkódtárakból származó szokásos Sql Csatlakozás ion-objektum bővítménymetódusán keresztül kínálja. A DDR rugalmas méretezési API-k által visszaadott SQL-kapcsolat szintén rendszeres SQL Csatlakozás ion-objektumok. Ez lehetővé teszi a Dapper-bővítmények közvetlen használatát az ügyfélkódtár DDR API-ja által visszaadott típuson keresztül, mivel ez egy egyszerű SQL-ügyfélkapcsolat is.
Ezek a megfigyelések megkönnyítik a Rugalmas adatbázis ügyfélkódtára által közvetített kapcsolatok használatát a Dapper számára.
Ez a kódminta (a mellékelt mintából) azt a megközelítést mutatja be, ahol az alkalmazás a szilánkkulcsot a tárhoz irányítja a jobb oldali szegmenshez való kapcsolat közvetítéséhez.
using (SqlConnection sqlconn = shardingLayer.ShardMap.OpenConnectionForKey(
key: tenantId1,
connectionString: connStrBldr.ConnectionString,
options: ConnectionOptions.Validate))
{
var blog = new Blog { Name = name };
sqlconn.Execute(@"
INSERT INTO
Blog (Name)
VALUES (@name)", new { name = blog.Name }
);
}
Az Open Csatlakozás ionForKey API hívása felülírja az SQL-ügyfélkapcsolat alapértelmezett létrehozását és megnyitását. A Megnyitás Csatlakozás ionForKey hívás az adatfüggő útválasztáshoz szükséges argumentumokat veszi fel:
- A szegmenstérkép az adatfüggő útválasztási felületek eléréséhez
- A szegmenskulcs a szegmens azonosításához
- A szegmenshez való csatlakozáshoz szükséges hitelesítő adatok (felhasználónév és jelszó)
A szegmensleképezési objektum kapcsolatot hoz létre a szegmenshez, amely az adott szegmenskulcshoz tartozó szegmenst tartalmazza. A rugalmas adatbázis-ügyfél API-k a konzisztencia garanciáinak megvalósításához is címkézik a kapcsolatot. Mivel az Open Csatlakozás ionForKey hívása egy normál SQL-ügyfélkapcsolati objektumot ad vissza, a Dapper végrehajtási bővítmény metódusának következő hívása a szokásos Dapper-gyakorlatot követi.
A lekérdezések ugyanúgy működnek – először az Open Csatlakozás ionForKey használatával nyitja meg a kapcsolatot az ügyfél API-ból. Ezután a szokásos Dapper-bővítménymetódusokkal leképzi az SQL-lekérdezés eredményeit .NET-objektumokra:
using (SqlConnection sqlconn = shardingLayer.ShardMap.OpenConnectionForKey(
key: tenantId1,
connectionString: connStrBldr.ConnectionString,
options: ConnectionOptions.Validate ))
{
// Display all Blogs for tenant 1
IEnumerable<Blog> result = sqlconn.Query<Blog>(@"
SELECT *
FROM Blog
ORDER BY Name");
Console.WriteLine("All blogs for tenant id {0}:", tenantId1);
foreach (var item in result)
{
Console.WriteLine(item.Name);
}
}
Vegye figyelembe, hogy a DDR-kapcsolattal rendelkező használatblokk a blokkon belüli összes adatbázis-műveletet arra a szegmensre terjed ki, ahol a tenantId1 található. A lekérdezés csak az aktuális szegmensben tárolt blogokat adja vissza, más szegmenseken tároltakat azonban nem.
Adatfüggő útválasztás a Dapper és a DapperExtensions használatával
A Dapper egy további bővítményekkel rendelkező ökoszisztémával rendelkezik, amely további kényelmet és absztrakciót biztosít az adatbázisból az adatbázis-alkalmazások fejlesztésekor. A DapperExtensions egy példa.
A DapperExtensions használata az alkalmazásban nem változtatja meg az adatbázis-kapcsolatok létrehozásának és kezelésének módját. Továbbra is az alkalmazás feladata a kapcsolatok megnyitása, és a bővítménymetódusok normál SQL-ügyfélkapcsolati objektumokat várnak. A fent vázolt Open Csatlakozás ionForKey fájlra támaszkodhatunk. Ahogy az alábbi kódminták is mutatják, az egyetlen változás az, hogy már nem kell megírnia a T-SQL-utasításokat:
using (SqlConnection sqlconn = shardingLayer.ShardMap.OpenConnectionForKey(
key: tenantId2,
connectionString: connStrBldr.ConnectionString,
options: ConnectionOptions.Validate))
{
var blog = new Blog { Name = name2 };
sqlconn.Insert(blog);
}
A lekérdezés kódmintája pedig a következő:
using (SqlConnection sqlconn = shardingLayer.ShardMap.OpenConnectionForKey(
key: tenantId2,
connectionString: connStrBldr.ConnectionString,
options: ConnectionOptions.Validate))
{
// Display all Blogs for tenant 2
IEnumerable<Blog> result = sqlconn.GetList<Blog>();
Console.WriteLine("All blogs for tenant id {0}:", tenantId2);
foreach (var item in result)
{
Console.WriteLine(item.Name);
}
}
Átmeneti hibák kezelése
A Microsoft Patterns & Practices csapata közzétette az átmeneti hibakezelési alkalmazásblokkot , amely segít az alkalmazásfejlesztőknek enyhíteni a felhőben való futtatáskor előforduló gyakori átmeneti hibafeltételeket. További információ: Kitartás, Minden diadal titka: Az átmeneti hibakezelési alkalmazásblokk használata.
A kódminta az átmeneti hibatárra támaszkodik az átmeneti hibák elleni védelem érdekében.
SqlDatabaseUtils.SqlRetryPolicy.ExecuteAction(() =>
{
using (SqlConnection sqlconn =
shardingLayer.ShardMap.OpenConnectionForKey(tenantId2, connStrBldr.ConnectionString, ConnectionOptions.Validate))
{
var blog = new Blog { Name = name2 };
sqlconn.Insert(blog);
}
});
Az SqlDatabaseUtils.SqlRetryPolicy a fenti kódban sqlDatabaseTransientErrorDetectionStrategy néven van definiálva, amelynek újrapróbálkozási száma 10, és 5 másodperc várakozási idő az újrapróbálkozások között. Ha tranzakciókat használ, győződjön meg arról, hogy az újrapróbálkozási hatókör egy átmeneti hiba esetén visszamegy a tranzakció elejére.
Korlátozások
A dokumentumban ismertetett megközelítések néhány korlátozást vonnak maguk után:
- A dokumentum mintakódja nem mutatja be a sémák szegmensek közötti kezelését.
- Egy kérés alapján feltételezzük, hogy az adatbázis-feldolgozás egyetlen szegmensben található, a kérés által biztosított skálázási kulcs alapján. Ez a feltételezés azonban nem mindig rendelkezik például akkor, ha nem lehet elérhetővé tenni egy szegmenskulcsot. Ennek megoldásához a rugalmas adatbázis-ügyfélkódtár tartalmazza a MultiShardQuery osztályt. Az osztály kapcsolati absztrakciót valósít meg több szegmensen keresztüli lekérdezéshez. A MultiShardQuery és a Dapper együttes használata meghaladja a dokumentum hatókörét.
Összefoglalás
A Dappert és a DapperExtensionst használó alkalmazások könnyen kihasználhatják az Azure SQL Database rugalmas adatbázis-eszközeinek előnyeit. A dokumentumban ismertetett lépések révén ezek az alkalmazások az eszköz adatfüggő útválasztási képességét használhatják az új Sql Csatlakozás ion-objektumok létrehozásának és megnyitásának módosításával a rugalmas adatbázis-ügyféltár Open Csatlakozás ionForKey hívásának használatára. Ez korlátozza a szükséges alkalmazásmódosításokat azokon a helyeken, ahol új kapcsolatok jönnek létre és nyílnak meg.
További információforrások
Még nem használ rugalmas adatbázis-eszközöket? Tekintse meg az első lépések útmutatót. Ha kérdése van, lépjen kapcsolatba velünk az SQL Database-hez készült Microsoft Q&A kérdésoldalon, és a funkciókérésekért, adjon hozzá új ötleteket, vagy szavazzon a meglévő ötletekre az SQL Database visszajelzési fórumában.
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: