Modelovací vzory pro dokumentová, klíč–hodnota, širokosloupcová, grafová a vektorová úložiště — kdy vkládat, odkazovat, denormalizovat nebo dělit do časových oken.
Úložiště NoSQL vyměňují pevná schémata a joiny za horizontální škálovatelnost. Každá rodina modeluje vztahy po svém, takže strukturu určuje přístupový vzor, ne normální forma.
Referenční tabulka · 28 položek
Modelování dat NoSQLExplained
28 of 28 rows
Dokumenty
Vnořené poddokumenty žijí uvnitř jednoho rodičovského dokumentu místo samostatných tabulek.
Vztahy one-to-few čtené společně. Objednávka s jejími položkami. Uživatel se třemi adresami.
Uloží cizí id, ne data. Vyřeší se druhým čtením nebo $lookup.
Velké, sdílené nebo nezávisle aktualizované podentity. Vazby mnoho-k-mnoha napříč kolekcemi.
Rodič vkládá krátké pole potomků; celá sada se vejde a načte jako jeden dokument.
Pár telefonních čísel nebo předvoleb v profilu. Jedno čtení vrátí rodiče i potomky.
Potomci žijí ve vlastní kolekci; každý nese id rodiče, nebo rodič drží omezené pole id.
Sady příliš velké nebo příliš nezávislé na vkládání. Dotazujte potomky podle id rodiče.
Potomek ukládá id rodiče; rodič nikdy nevypisuje potomky, protože sada je neomezená.
Události, logy nebo hlasy navázané na hostitele či uživatele. Filtrujte potomky podle id rodiče a stránkujte.
Dokumenty různých typů entit sdílejí jednu kolekci a rozlišují se polem typu.
Komentáře nebo notifikace navázané na mnoho druhů rodičů, všechny dotazované jedním způsobem.
Několik extrémních entit se vyčlení ze společného tvaru, aby svou velikostí či provozem nezkreslovaly zbytek.
Účty celebrit, jejichž seznamy sledujících nebo počítadla by prorostly normálním dokumentem.
Každá revize je nový dokument se stejným id a rostoucím číslem verze; dotaz vybírá nejnovější.
Audity a historie úprav, kde zůstávají staré revize dotazovatelné.
Odvozené hodnoty se počítají při zápisu a ukládají se vedle dat, která shrnují.
Součty, hodnocení a top-N, které by jinak při každém čtení spouštěly agregaci.
Klíč–hodnota a široké sloupce
Pojem ze světa DynamoDB: mnoho typů entit sbalit do jedné tabulky pomocí přetížených partition a sort klíčů.
Získejte heterogenní položky jedním dotazem bez joinu.
Jeden atribut klíče slouží mnoha typům entit, označený prefixy jako USER# nebo ORDER#.
Single-table návrhy. Sdružte související položky pod jednu partition a získejte je jedním dotazem.
Partition klíč rozhazuje řádky po uzlech; sort klíč řadí v každé partition.
Cassandra a DynamoDB. Rozsahové scany, uspořádané logy, hierarchické kompozitní klíče.
Několik atributů se skládá do jednoho sort klíče s oddělovačem — country#region#city — takže porovnání prefixu prochází hierarchii směrem dolů.
Hierarchie a vícefasetové filtry. Jeden uspořádaný rozsahový dotaz nahradí mnoho vyhledávání v indexu.
Události se seskupují do pevných oken — hodina, den, měsíc — pod vyhrazené partition nebo tabulky.
Metriky, logy a IoT telemetrie. Omezuje velikost partition a umožňuje nechat studená data vypršet.
Čtecí náročná pole se duplikují napříč záznamy, aby dotaz nikdy nepátral po druhém hledání.
Zátěž těžká na čtení, kde je eventuální konzistence únosná a úložiště levné.
Sekundární index nad atributem, který nesou jen některé položky; položky bez něj se do indexu nikdy nedostanou.
Alternativní přístupové cesty. Najděte řídkou podmnožinu — otevřené objednávky, neodeslané položky — bez full scanu.
Nejprve se napíší přesné dotazy; rozložení tabulky se z nich odvodí, ne z entit ani normální formy.
Práce se schématy v Cassandře a DynamoDB. Jedna tabulka na rodinu dotazů; datový model kopíruje otázku.
Dotaz musí paralelně zasáhnout mnoho partition nebo uzlů, protože žádný klíč neodpovídá otázce.
Zápach, který má být vyřešen návrhem, ne cíl. Překlíčujte tabulku, aby častý dotaz přistál na jedné partition.
Kopie se při zápisu rozesílají do pohledů čtenářů, nebo se při čtení posbírají a sloučí.
Feedy a timeline. Fan-out při zápisu pro malá publika, při čtení pro obrovská.
Předpočítaný výsledek dotazu uložený jako vlastní tabulka, udržovaný aktuální při změnách základu.
Alternativní čtecí tvary nad jednou zapisovací cestou. Obsluhuje dotazy, které základní tabulka nezvládne.
Grafy
Každá hrana je řádek nebo n-tice ukazující ze zdrojového uzlu na cílový.
Grafová a property úložiště. Friend-of-friend hledání, směrování, doporučení.
Každý vztah je dokument ve vlastní kolekci, nese id from a to plus atributy vazby.
Grafy v dokumentových úložištích. Atributy na samotné vazbě — hodnocení, role, časové razítko.
Každý uzel ukládá levý a pravý čítač z průchodu do hloubky; podstrom žije v rozsahu svého rodiče.
Stromy náročné na čtení. Jeden dotaz BETWEEN vrátí podstrom; vložení přečísluje průchod.
Vyhrazená tabulka zaznamenává každý pár předek–potomek, včetně každého uzlu v hloubce nula.
Dotazy na celé větve v libovolné hloubce. Jednoduché joiny, zaplacené úložištěm a údržbou.
Property grafy přidělují uzlům a hranám atributy klíč–hodnota; RDF vyjadřuje vše jako trojice subjekt–predikát–objekt.
Property grafy pro bohaté procházení (Neo4j); RDF pro linked open data a výměnu ontologií.
Vektory
Vysokodimenzionální pole floatů leží vedle metadat. ANN index hledá nejbližší sousedy.
Sémantické hledání, RAG retrieval, doporučení a podobnost nad nestrukturovaným obsahem.
Zdrojové dokumenty se dělí — podle velikosti, překryvu nebo struktury — než se každý kus vloží zvlášť.
Kvalita RAG retrieval. Velikost chunku vyměňuje přesnost za recall; překryv chrání rozdělené věty.
Hustá vektorová podobnost běží vedle hledání klíčových slov; oba seřazené seznamy se sloučí v jeden výsledek.
Dotazy, které najednou potřebují přesné termíny i význam, navíc s metadatovými filtry.