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

MongoDB a složené primární klíče

Měli byste zvolit možnost 1.

Hlavním důvodem je, že říkáte, že se obáváte o výkon – použití indexu _id, který je vždy k dispozici a již jedinečný, vám umožní ušetřit nutnost udržovat druhý jedinečný index.

U možnosti 1 se obávám o výkon vložky při použití nesekvenčních klíčů. Vím, že to může zabít tradiční systémy RDBMS a viděl jsem náznaky, že by to mohla být pravda i v MongoDB.

Vaše další možnosti se tomuto problému nevyhnou, pouze jej přesunou z indexu _id na sekundární jedinečný index – ale nyní máte dva indexy, jeden je správně vyvážený a druhý s náhodným přístupem.

Existuje pouze jeden důvod ke zpochybnění možnosti 1, a to pokud plánujete přistupovat k dokumentům pouze pomocí jedné nebo pouze druhé hodnoty UUID. Dokud vždy poskytujete obě hodnoty a (tato část je velmi důležitá) je vždy seřadíte stejným způsobem ve všech svých dotazech, pak bude index _id efektivně sloužit svému plnému účelu.

Jako vysvětlení, proč se musíte ujistit, že vždy objednáváte dvě hodnoty UUID stejným způsobem, při porovnávání vnořených dokumentů { a:1, b:2 } se nerovná { b:2, a:1 } - mohli byste mít kolekci, kde dva dokumenty měly tyto hodnoty pro _id. Pokud tedy uložíte _id s polem a jako první, musíte toto pořadí vždy zachovat ve všech svých dokumentech a dotazech.

Další upozornění je, že index na _id:1 bude použitelný pro dotaz:

db.collection.find({_id:{a:1,b:2}}) 

ale nebude být použitelný pro dotaz

db.collection.find({"_id.a":1, "_id.b":2})


  1. Připojování ke vzdálenému serveru redis

  2. Kdy zavřít připojení k databázi MongoDB v Nodejs

  3. Redis Python - jak odstranit všechny klíče podle konkrétního vzoru v pythonu, bez iterace pythonu

  4. Jak nasadit node.js s redis na kubernetes?