sql >> Databasteknik >  >> NoSQL >> MongoDB

Prestandanackdel med slug som primärnyckel/_id i mongo?

Enligt min mening nej. Prestandaskillnaden kommer att vara försumbar för de flesta scenarier (förutom personsökning ), men

  • Den gamla diskussionen om surrogat primärnycklar kommer upp. En "snigel" är inte en särskilt naturlig nyckel. Ja, det måste vara unikt, men som du redan påpekat borde det inte vara omöjligt att byta snigel. Bara detta skulle hålla mig från att störa mig...
  • Att ha ett monotont _id nyckel kan rädda dig från ett antal huvudvärk, viktigast av allt för att undvika dyr personsökning via skip och take (använd $lt /$gt_id istället).
  • Det finns en gräns för maximala indexlängden i mongodb på mindre än 1024 byte. Även om det inte är snyggt får webbadresser vara mycket längre . Om någon skrev in en längre snigel, skulle den inte hittas eftersom den tyst har tappats från indexet.
  • Det är en bra idé att ha ett konsekvent gränssnitt, det vill säga att använda samma typ av _id på alla, eller åtminstone, de flesta av dina föremål. I min kod har jag ett enda undantag där jag använder en speciell hash som id eftersom värdet inte kan ändras, samlingen har extremt höga skrivhastigheter och den är stor.
  • Anta att du vill länka till artikeln i ditt hanteringsgränssnitt (inte den offentliga webbplatsen), vilken länk skulle du använda? Normalt id, men nu är id och snigel likvärdiga. Nu skulle en enkel bugg (som att tillåta en tom snigel) vara svår att återhämta sig från, eftersom användaren inte ens kunde gå till hanteringsgränssnittet längre.
  • Du kommer att ta itu med teckenuppsättningsproblem. Jag skulle föreslå att du inte ens använder snigeln för att leta upp artikeln, utan snigelns hash .

I huvudsak skulle du sluta med ett schema som

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



  1. Mongodb $graphLookup bygghierarki

  2. Fråga för att hitta alla dokument med millisekunder som inte är noll

  3. PHP-start:Det går inte att ladda det dynamiska biblioteket 'php_mongodb.dll'

  4. hur man grupperar i mongoDB och returnerar alla fält i resultat