Azure Cosmos DB:n tehokas käyttö ja optimointi vaativat huolellista suunnittelua, erityisesti oikean jakamisen avaimen (partition key) valinnassa. Jakamisen avain on olennainen osa tietokannan rakennetta, sillä se määrää, miten tietueet jaetaan eri osiin (partitions) tietokannassa. Koska jakamisen avain määritetään säiliölle (container) ja sitä ei voi myöhemmin muuttaa, on tärkeää valita se huolellisesti jo suunnitteluvaiheessa.
Hyvä jakamisen avain valitaan siten, että se jakaa tiedot tasaisesti eri osiin, mikä estää ylikuormitusta yhdelle osalle. Esimerkiksi avain, joka on ainutlaatuinen tietueelle ja jota käytetään usein tietyn kohteen hakemiseen, voi olla hyvä valinta. Esimerkiksi Yhdysvalloissa kansalaiselle kuuluva sosiaaliturvatunnus voi olla looginen jakamisen avain, sillä se on yksilöllinen ja siihen viitataan usein. On kuitenkin tärkeää muistaa, että jakamisen avaimet eivät ole pakollisesti yksilöllisiä. Avain yhdistetään aina tietueen ID:n kanssa, jolloin muodostuu yksilöllinen tunnus tietueelle.
Cosmos DB hoitaa osioiden (partitions) luomisen automaattisesti tarvittaessa, eikä tästä synny negatiivista vaikutusta sovelluksillesi tai palveluillesi. Kunkin osion koko voi kasvaa enintään 20 gigatavuun, ja Cosmos DB jakaa osioita automaattisesti tarpeen mukaan. Tärkeintä on, että valitsemallasi jakamisen avaimella on seuraavat ominaisuudet:
-
Suuri kardinaliteetti: Tietueiden tulee jakautua tasaisesti osioihin, jolloin vältetään ylikuormitus yhdelle osiolle.
-
Tasaisesti jakautuneet pyynnöt: Pyyntöjen tulee jakautua tasaisesti eri osioihin, jotta suorituskyky ei kärsi.
-
Tasaisesti jakautunut tallennus: Tiedon tallennus tulee jakautua tasaisesti, jolloin vältetään osioiden liiallinen kasvaminen.
NoSQL-tietokantojen, kuten Azure Cosmos DB:n, etuna on niiden joustavuus verrattuna perinteisiin relaatiotietokantoihin. Relaatiotietokannoissa skeemat ovat tiukasti määriteltyjä ja jäykkiä, mikä tarkoittaa, että tietorakenteen muuttaminen voi olla vaikeaa ja aikaa vievää. Azure Cosmos DB:n kaltainen puolistrukturoitu tietokanta on paljon joustavampi. Esimerkiksi kaupallisen järjestelmän suunnittelussa, joka myy monenlaisia tuotteita kuten vaatteita, elektroniikkaa ja kirjoja, voidaan käyttää seuraavanlaista rakenteellista lähestymistapaa:
-
Vaatteet: Koko (S, M, L, XL); brändi; väri
-
Kengät: Koko (7, 8, 9); brändi; väri
-
Televisiot: Koko (40", 52"); näyttöteknologia (OLED, LCD); brändi
-
Kirjat: Sivumäärä; kirjoittaja; kustantaja
Tämä rakenne voidaan helposti laajentaa lisäämällä uusia tuotetyyppejä eri ominaisuuksilla ja rakenteilla. Koska Cosmos DB on skeematonta, on yksinkertaista lisätä uusi tuote, jonka rakenne poikkeaa aiemmista, pelkästään lisäämällä tuote tietokannan säiliöön.
Tietojen siirtäminen Azure Cosmos DB:hen voi olla yksinkertaista käyttämällä avoimen lähdekoodin Azure Cosmos DB -tietojen siirtotyökalua. Tämä työkalu tukee useita eri lähteitä, kuten Azure Table Storage, SQL-tietokannat, MongoDB ja monet muut. Siirtotyökalun avulla voit tuoda tietoja eri formaateista, kuten JSON- ja CSV-tiedostoista.
Azure Cosmos DB -resurssien luominen on helppoa ja sen voi tehdä joko Azure-portaalin kautta manuaalisesti tai ohjelmallisesti käyttämällä Azure Cosmos DB .NET SDK:ta. Voit luoda resursseja myös paikallisesti käyttäen Cosmos DB -emulaattoria, joka ei aiheuta kustannuksia. Emulaattori tukee vain Windowsia, mutta Linux- ja macOS-käyttäjät voivat kokeilla Linux- tai Windows-virtuaalikoneeseen asennettavaa emulaattoria. Paikallisessa ympäristössä työskentely tarjoaa erinomaisen mahdollisuuden testata ja kehittää ilman kustannuksia.
Kun käytetään emulaattoria Windows-ympäristössä, voit luoda Cosmos DB -resursseja seuraavalla tavalla:
-
Lataa ja asenna Azure Cosmos DB Emulator Windows-koneellesi.
-
Varmista, että emulaattori on käynnissä.
-
Avaa emulaattorin käyttöliittymä selaimessa osoitteessa https://localhost:8081/_explorer/index.html.
-
Luo uusi säiliö, valitse tietokannan nimi (esim. Northwind), ja määritä jakamisen avain (esim. /productId).
-
Lisää tuoteesimerkkejä JSON-muodossa, kuten "Chai" ja "Chang", ja tallenna ne.
Tämä yksinkertainen esimerkki osoittaa, kuinka helposti voit luoda ja hallita tietoja paikallisessa ympäristössä Azure Cosmos DB:ssä, ja testata eri rakenteita ennen kuin siirryt tuotantovaiheeseen.
NoSQL-tietokannat, kuten Azure Cosmos DB, ovat erittäin tehokkaita joustavuuden, skaalautuvuuden ja suoritustehojen suhteen. Kuitenkin on tärkeää, että käyttäjät ymmärtävät, että vaikka Cosmos DB ei vaadi tiukkaa skeemaa, sen optimaalinen käyttö edellyttää huolellista suunnittelua erityisesti jakamisavaimen ja tietorakenteen osalta. On myös syytä huomata, että vaikka Cosmos DB mahdollistaa osioiden automaattisen jakamisen, se ei poista tarvetta tasaiselle kuormituksen ja tallennuksen jakautumiselle, mikä voi vaikuttaa suorituskykyyn ja kustannuksiin pitkällä aikavälillä.
Miten käyttää AutoMapperin konfigurointia ja testauskäytäntöjä C#-sovelluksissa?
AutoMapperin käyttö sovelluksissa on laajalti suosittu tapa automatisoida objektien välisten tietojen siirtoa eri mallien välillä. Tämä prosessi helpottaa koodin ylläpitoa ja vähentää virheitä, joita voi syntyä manuaalisessa tietojen kopioinnissa eri luokkien välillä. Kun AutoMapper on konfiguroitu oikein, se voi yksinkertaistaa monimutkaisempia tietojen siirtoa ja parantaa ohjelmiston luotettavuutta. Tämä luku käsittelee AutoMapperin käytön perusteita ja siihen liittyviä testauskäytäntöjä.
AutoMapperin konfigurointia testattaessa ensimmäinen askel on määrittää kartoitus, joka liittää lähde- ja kohdeobjektit toisiinsa. Testissä on kuitenkin tärkeää huomioida, että joskus kaikki kentät eivät ole automaattisesti kartoitettuja, mikä voi johtaa testin epäonnistumiseen. Esimerkiksi, kun otetaan käyttöön CartToSummaryMapper-mapperi, saattaa käydä niin, että Total-kenttä ei ole määritetty kartoitettavaksi, mikä aiheuttaa testin epäonnistumisen.
Tässä vaiheessa voidaan lisätä puuttuva kenttä kartoitukseen. Esimerkiksi, jos summakenttä (Total) on jäänyt kartoituksen ulkopuolelle, voidaan määrittää se seuraavalla tavalla:
Tämän jälkeen voidaan suorittaa testejä ja todeta, että mapperi toimii oikein ja testit menevät läpi. Tällöin on tärkeää huomioida, että testin onnistuminen on merkki siitä, että konfiguraatio on kunnossa ja AutoMapper on määritetty oikein.
Kun konfiguraatio on valmis ja testit menevät läpi, voidaan siirtyä käyttämään tätä kartoitusta oikeassa sovelluksessa. Esimerkiksi, luodaan Console App -projekti, joka simuloi ostoskoria ja sen yhteenvetoa käyttäen AutoMapperin luomia konfiguraatioita. Tällöin voidaan luoda esimerkkimalli asiakkaasta ja hänen ostoskoriinsa liittyvistä tuotteista ja suorittaa niille kartoitus yhteenvetomalliin:
Kun tämä koodi suoritetaan, tuloksena on yhteenveto, jossa asiakas ja hänen ostoksensa näkyvät selkeästi:
Tässä vaiheessa on hyvä muistaa, että vaikka AutoMapper on kätevä työkalu, sen käyttö ei ole aina suositeltavaa kaikissa tilanteissa. AutoMapperin käyttö voi johtaa piileviin virheisiin, jos kartoituksia ei ole määritelty huolellisesti. Esimerkiksi liian yleisiä kartoituksia tai huonosti määriteltyjä kenttiä voi johtaa virheellisiin tuloksiin. On suositeltavaa lukea asiasta tarkemmin ja ymmärtää, milloin AutoMapperin käyttö on perusteltua, ja milloin sen voi korvata manuaalisella ratkaisulla, joka saattaa olla suoraviivaisempi ja turvallisempi.
Tässä yhteydessä on myös tärkeää mainita FluentAssertions, joka on kätevä kirjasto yksikkötesteissä. Se mahdollistaa sujuvan ja luettavan tavan suorittaa väittämiä (assertions) testeissä, jolloin koodin virheiden ja virheviestien lukeminen on helpompaa. FluentAssertions toimii useimpien testauskehyksien, kuten xUnitin, kanssa. Kun olet lisännyt FluentAssertionsin projektiin, voit käyttää sitä näin:
FluentAssertionsin avulla voit tehdä väittämiä, jotka lukevat luonnollisemmin kuin perinteiset tarkistukset. Se voi myös olla hyödyllinen työkalu testien virheiden selvittämisessä, sillä se antaa selkeitä virheilmoituksia.
Kun teet väittämiä kokoelmista tai taulukoista, FluentAssertions tarjoaa tehokkaita työkaluja niiden tarkistamiseen. Esimerkiksi voit tarkistaa, että kokoelma sisältää vain elementtejä, joiden pituus on enintään kuusi:
On myös tärkeää testata ajankohtaisia arvoja, kuten päivämääriä ja aikoja, FluentAssertionsin avulla. Tämä voi olla erityisen hyödyllistä, kun käsitellään sovelluksissa ajantasaista tietoa, joka saattaa muuttua.

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский