sql >> Databáze >  >> NoSQL >> MongoDB

Co je nového v MongoDB 4.2

Aktualizace databáze obsahují vylepšené funkce pro výkon, zabezpečení a nové integrované funkce. Vždy je vhodné novou verzi před nasazením do výroby otestovat, jen aby vyhovovala vašim potřebám a nedocházelo k haváriím.

Vzhledem k mnoha produktům mají ty, které předcházejí prvním vedlejším verzím nové hlavní verze, nejdůležitější opravy. Například bych preferoval mít MongoDB verze 4.2.1 ve výrobě několik dní po vydání než verzi 4.2.0.

V tomto blogu budeme diskutovat o tom, co bylo zahrnuto a jaká vylepšení byla provedena v MongoDB verze 4.2

Co je nového v MongoDB 4.2

  1. Distribuované transakce
  2. Zástupné znaky
  3. Opakovatelné čtení a zápis
  4. Automatické šifrování na úrovni pole na straně klienta.
  5. Vylepšený dotazovací jazyk pro výrazné aktualizace
  6. Zhmotněná zhlédnutí na vyžádání
  7. Moderní operace údržby

Distribuované transakce

Transakce jsou důležité databázové funkce, které zajišťují konzistenci a integritu dat, zejména ty, které zaručují postupy ACID. MongoDB verze 4.2 nyní podporuje transakce s více dokumenty na sadách replik a sdílený cluster prostřednictvím přístupu distribuovaných transakcí. Stejná syntaxe pro použití transakcí byla zachována jako u předchozí verze 4.0.

Specifikace klientských ovladačů se však trochu změnily, takže pokud někdo zamýšlí používat transakce v MongoDB 4.2, musíte  upgradovat ovladače na verze, které jsou kompatibilní se servery 4.2.

Tato verze neomezuje velikost transakce, pokud jde o využití paměti, ale závisí pouze na velikosti vašeho hardwaru a schopnosti manipulace s hardwarem.

Změna globálního umístění clusteru je nyní možná ve verzi 4.2. To znamená, že pro implementaci shardingu geografické zóny, pokud se uživatel s bydlištěm v regionu A přesune do regionu B, změnou hodnoty pole jeho umístění mohou být data automaticky přesunuta z regionu A do B prostřednictvím transakce.

Systém shardingu nyní umožňuje změnit shard klíč oproti předchozí verzi. Doslova, když se změní shard klíč, je to ekvivalent přesunutí dokumentu na jiný fragment. V této verzi MongoDB tuto aktualizaci zabalí a pokud je třeba dokument přesunout z jednoho fragmentu do druhého, bude aktualizace provedena v rámci transakce na pozadí.

Používání transakcí není vhodný přístup, protože snižují výkon databáze, zejména pokud k nim dochází vícekrát. Během období transakce je rozšířené okno pro operace, které mohou způsobit konflikty při zápisu do dokumentu, který je ovlivněn. I když lze transakci opakovat, před tímto opakováním může být provedena aktualizace dokumentu, a kdykoli dojde k opakování, může se jednat o starou než nejnovější verzi dokumentu. Opakované pokusy samozřejmě vyžadují vyšší náklady na zpracování, kromě prodloužení prostojů aplikace díky rostoucí latenci.

Osvědčené postupy při používání transakcí zahrnují:

  1. Vyhněte se používání neindexovaných dotazů v rámci transakce jako způsobu, jak zajistit, že operace nebude pomalá.
  2. Vaše transakce by měla zahrnovat několik dokumentů.

Díky formátu dynamického schématu MongoDB a funkce vkládání se můžete rozhodnout umístit všechna pole do stejné kolekce, abyste nemuseli používat transakci jako první měřítko.

Zástupné znaky

Indexy zástupných znaků byly zavedeny v MongoDB verze 4.2, aby zlepšily dotazy na libovolná pole nebo pole, jejichž názvy nejsou předem známy, indexováním celého dokumentu nebo vnořeného dokumentu. Nejsou určeny k tomu, aby nahradily indexy založené na pracovní zátěži. ale oblek pro práci s daty zahrnujícími polymorfní vzor. Polymorfní vzor je tam, kde jsou všechny dokumenty v kolekci podobné, ale nemají identickou strukturu. Polymorfní datové vzory lze generovat z aplikací, katalogů produktů nebo sociálních dat. Níže je uveden příklad dat kolekce Polymorphic

{

Sport: ‘Chess’,

playerName: ‘John Mah’,

Career_earning: {amount: NumberDecimal(“3000”), currency: “EUR”},

gamesPlayed:25,

career_titles:10

},

{

Sport: Tennis,

playerName: ‘Semenya Jones,

Career_earning: {amount: NumberDecimal(“34545”), currency: “USD”},

Event: {

name:”Olympics”,

career_titles:10,

career_tournaments:14

}

Indexováním celého dokumentu pomocí zástupných indexů můžete vytvořit dotaz pomocí libovolného pole jako indexu.

Vytvoření indexu zástupných znaků

$db.collection.createIndex({“fieldA.$**”: 1})

Pokud je vybrané pole vnořeným dokumentem nebo polem, index zástupných znaků se vrátí do dokumentu a uloží hodnotu pro všechna pole v dokumentu nebo poli.

Opakovatelné čtení a zápis

Za normálních okolností může databáze vykazovat časté přechodné výpadky sítě, které mohou mít za následek částečné nebo úplné nevyřízení dotazu. Tyto síťové chyby nemusí být tak závažné, a proto nabízejí možnost opakování těchto dotazů po opětovném připojení. Počínaje MongoDB 4.2 je konfigurace opakování ve výchozím nastavení povolena. Ovladače MongoDB mohou opakovat neúspěšné čtení a zápis pro určité transakce, kdykoli narazí na drobné síťové chyby, nebo spíše když nejsou schopny najít nějaký zdravý primární prvek v sadě sdíleného clusteru/repliky. Pokud však nechcete opakovatelné zápisy, můžete je výslovně zakázat ve svých konfiguracích, ale nenacházím přesvědčivý důvod, proč je deaktivovat.

Tato funkce má zajistit, že v žádném případě změny infrastruktury MongoDB nebudou ovlivněny kód aplikace. Pokud jde o příklad vysvětlený Eliotem Horowitzem, spoluzakladatelem MongoDB, pro webovou stránku, která provádí 20 různých databázových operací, místo aby celou věc znovu načítala nebo musela celou webovou stránku zabalit do nějaké smyčky, ovladač pod pokličkou stačí se rozhodnout operaci zopakovat. Kdykoli se zápis nezdaří, automaticky se pokusí znovu a bude mít smlouvu se serverem, která zaručí, že každý zápis proběhne pouze jednou.

Opakovatelný zápis provede pouze jeden pokus o opakování, což pomáhá řešit volby sady replik a přechodné chyby sítě, ale nikoli trvalé chyby sítě.

Opakovatelné zápisy neřeší případy, kdy doba převzetí služeb při selhání překročí hodnotu serverSelectionTimoutMs v konfiguracích parametrů.

S touto verzí MongoDB lze aktualizovat hodnoty shardkey klíčů dokumentu (kromě případů, kdy je shardkey neměnné pole _id) vydáním operace findAndModify/update s jedním dokumentem buď v transakci nebo jako opakovatelný zápis .

MongoDB verze 4.2 se nyní může znovu pokusit o operaci upsert s jedním dokumentem (tj. upsert:true a multi:false), která mohla selhat z důvodu chyby duplicitního klíče, pokud operace splňuje tyto klíčové podmínky:

  1. Cílová kolekce obsahuje jedinečný index, který způsobil chybu duplicitního klíče.
  2. Operace aktualizace nezmění žádné z polí v predikátu dotazu.
  3. Podmínkou shody aktualizace je buď jeden predikát rovnosti {pole:“hodnota”} nebo logický AND predikátů rovnosti {filed:“value”, pole0:“value0”}
  4. Sada polí ve vzoru jedinečného klíče indexu odpovídá sadě polí v predikátu aktualizačního dotazu.

Automatické šifrování na úrovni pole na straně klienta

MongoDB verze 4.2 přichází s automatickým šifrováním na úrovni polí na straně klienta (CSFLE), což je funkce, která umožňuje vývojářům selektivně šifrovat jednotlivá pole dokumentu na straně klienta před jeho odesláním na server. Šifrovaná data jsou tak chráněna před poskytovateli hostující databázi a všemi uživateli, kteří mohou mít přímý přístup k databázi.

Pouze aplikace s přístupem ke správným šifrovacím klíčům mohou dešifrovat a číst chráněná data. V případě smazání šifrovacího klíče se všechna zašifrovaná data stanou nečitelnými.

Poznámka:Tato funkce je dostupná pouze u MongoDB enterprise.

Vylepšený dotazovací jazyk pro výrazné aktualizace

MongoDB verze 4.2 poskytuje bohatší dotazovací jazyk než jeho předchůdci. Nyní podporuje agregace a moderní operace typu use-case po vzoru geografického vyhledávání, grafového vyhledávání a textového vyhledávání. Integroval vyhledávač třetí strany, díky kterému je vyhledávání rychlejší vzhledem k tomu, že vyhledávač běží na jiném procesu/serveru. To obecně zlepšuje výkon databáze na rozdíl od toho, kdyby byla všechna vyhledávání prováděna procesem mongod, což by spíše činilo latenci operace databáze kolísavou, kdykoli by vyhledávač reindexoval.

S touto verzí nyní můžete pracovat s poli, provádět součty a další matematické operace přímo prostřednictvím příkazu aktualizace.

Materializovaná zhlédnutí na vyžádání

Rámec potrubí agregace dat v MongoDB je skvělá funkce s různými fázemi transformace dokumentu do požadovaného stavu. MongoDB verze 4.2 zavádí novou fázi $merge, která mi, řeknu, ušetřila čas při práci s konečným výstupem, který bylo potřeba uložit do kolekce. Zpočátku fáze $out umožňuje vytvořit novou kolekci založenou na agregaci a naplní kolekci získanými výsledky. Pokud kolekce již existuje, přepíše kolekci novými výsledky na rozdíl od fáze $merge, která pouze začleňuje výsledky z kanálu do existujícího výstupu, místo aby kolekci plně nahradila. Regenerace celé kolekce pokaždé ve fázi $out spotřebovává hodně CPU a IO, což může snížit výkon databáze. Výstupní obsah bude proto včas aktualizován, což uživatelům umožní vytvářet materializované pohledy na vyžádání

Moderní operace údržby

Vývojáři mohou nyní mít skvělé provozní zkušenosti s MongoDB verze 4.2 s integrovanými funkcemi, které zlepšují vysokou dostupnost, cloudovou řízenou zálohovací strategii, zlepšují výkon monitorování a výstražné systémy. Poskytující platformy pro tyto funkce jsou MongoDB Atlas a MongoDB Ops Manager. Ten byl označen jako nejlepší pro provozování MongoDB v podniku. Byl také integrován s operátorem Kubernetes pro on-premise uživatele, kteří přecházejí na privátní cloud. Toto rozhraní umožňuje přímo ovládat Ops Manager.

V MongoDB verze 4.2 byly provedeny některé vnitřní změny, které zahrnují:

  1. Výpis otevřených kurzorů.
  2. Odstranění úložiště MMAPv1.
  3. Vylepšení opravy datového souboru WiredTiger.
  4. Diagnostická pole nyní mohou obsahovat queryHash
  5. Automatické dělení vlákna pro uzly mongos bylo odstraněno.

Závěr

MongoDB verze 4.2 přichází s některými vylepšeními v oblasti zabezpečení a výkonu databáze. Obsahuje automatické šifrování na úrovni pole na straně klienta, které zajišťuje ochranu dat z úhlu klienta. Více funkcí, jako je vyhledávač třetí strany a zahrnutí fáze sloučení $ do agregačního rámce, přináší určité zlepšení výkonu databáze. Před uvedením této verze do produkce se prosím ujistěte, že jsou plně vyřešeny všechny vaše potřeby.


  1. Aktualizace slovníku v Mongodb

  2. Instalace Apache CouchDB na CentOS 7

  3. MongoDB $dateToString

  4. Časový limit provádění SET {Key}, inst:0, mgr:Neaktivní, fronta:2, qu=1, qs=1, qc=0, wr=1/1, in=0/0