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

Nevýhoda výkonu při použití slugu jako primárního klíče/_id v mongo?

Podle mého názoru ne. Rozdíl ve výkonu bude pro většinu scénářů zanedbatelný (kromě stránkování ), ale

  • Nastává stará diskuse o náhradních primárních klíčích. "Slimák" není příliš přirozený klíč. Ano, musí být jedinečný, ale jak jste již uvedli, výměna slimáka by neměla být nemožná. To samo o sobě by mě zabránilo obtěžovat...
  • Mají monotónní _id klíč vás může ušetřit mnoha bolestí hlavy, hlavně abyste se vyhnuli drahému stránkování pomocí skip a take (použijte $lt /$gt na _id místo toho).
  • Je omezena maximální délka indexu v mongodb méně než 1024 bajtů. Ačkoli to není hezké, adresy URL mohou být mnohem déle . Pokud by někdo zadal delší slimák, nebyl by nalezen, protože je tiše vyřazen z indexu.
  • Je dobré mít konzistentní rozhraní, tj. používat stejný typ _id na všech nebo alespoň na většině vašich objektů. V mém kódu mám jedinou výjimku, kdy jako id používám speciální hash, protože hodnotu nelze změnit, kolekce má extrémně vysokou rychlost zápisu a je velká.
  • Řekněme, že chcete odkazovat na článek ve svém rozhraní pro správu (nikoli na veřejném webu), který odkaz byste použili? Normálně id, ale nyní jsou id a slug ekvivalentní. Nyní by se z jednoduché chyby (jako je povolení prázdného slimáka) dalo jen těžko dostat, protože uživatel už ani nemohl přejít do rozhraní pro správu.
  • Budete řešit problémy se znakovými sadami. Navrhoval bych pro vyhledávání článku ani nepoužívat slimák, ale hash slimáka .

V podstatě byste skončili se schématem jako

{ "_id" : ObjectId("a237b45..."), // PK
  "slug" : "mongodb-is-fun", // not indexed
  "hash" : "5af87c62da34" } // indexed, unique



  1. MongoDb :Jak vložit další objekt do kolekce objektů?

  2. Vnořený dotaz MongoDB vrací pouze poslední vyskytující se výsledek

  3. Kdy bych měl otevírat a zavírat připojení MongoDB?

  4. Aggreagte MongoDB vyplňte chybějící dny