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

MongoDB:Měli byste předem alokovat dokument, pokud používáte $addToSet nebo $push?

Doporučuje se, pokud je to pro daný případ použití možné, což obvykle není. Údaje z časových řad jsou výraznou výjimkou. S $addToSet to ve skutečnosti neplatí a $push protože mají tendenci zvětšovat velikost dokumentu zvětšováním pole.

Stop. Jste si jisti, že chcete neustále rostoucí pole s desítkami tisíc položek? Budete se ptát a chcete zpět konkrétní položky? Chystáte se indexovat nějaká pole v položkách pole? Pravděpodobně budete chtít přehodnotit strukturu dokumentu. Možná budete chtít každé data záznam jako samostatný dokument s poli jako market , type , createdAt replikovány v každém? Nemusíte si dělat starosti s přesuny dokumentů.

Proč pole naroste na 75 tisíc položek? Můžete udělat méně záznamů na jeden dokument? Jsou toto údaje časové řady ? Je skvělé mít možnost předběžně přidělovat dokumenty a provádět aktualizace na místě pomocí modulu úložiště mmap, ale není to možné pro každý případ použití a není to požadavek, aby MongoDB fungoval dobře.

Ne, to opravdu není užitečné. Velikost dokumentu bude vypočítána na základě velikosti BSON hodnot null v poli, takže když nahradíte null s jiným typem se velikost zvětší a stejně se přepíše dokument. Pole byste museli předem alokovat s objekty se všemi poli nastavenými na výchozí hodnotu pro jeho typ, např.

{
    "date" : ISODate("1970-01-01T00:00:00Z")    // use a date type instead of a string date
    "price" : 0,
    "amount" : 0,
    "tid" : "000000", // assuming 7 character code - strings icky for default preallocation
    "type" : "none"    // assuming it's "buy" or "sell", want a default as long as longest real values
}


  1. Jak získat dokumenty na základě datových filtrů (týden, měsíc a vlastní data) v MongoDB?

  2. Použití @Resource injection pro Mongo db, uvnitř Web Bundle uvnitř OSGI, pod Liberty Profile

  3. Jak zařadit řetězec json do dokumentu bson pro zápis do MongoDB?

  4. Použití deklarace nebylo nalezeno v ovladači mongodb c++