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

Proč záleží na směru indexu v MongoDB?

MongoDB nějakým způsobem zřetězí složený klíč a použije ho jako klíč v BTree.

Při hledání jednotlivých položek - Pořadí uzlů ve stromu je irelevantní.

Pokud vracíte rozsah uzlů - Prvky blízko sebe budou dole ve stejných větvích stromu. Čím blíže jsou uzly v dosahu, tím rychleji je lze získat.

S indexem jednoho pole - Na pořadí nezáleží. Pokud jsou blízko u sebe ve vzestupném pořadí, budou také blízko u sebe v sestupném pořadí.

Když máte složený klíč - Na pořadí začíná záležet.

Pokud je například klíč A vzestupně B vzestupně, index může vypadat nějak takto:

Row   A B
1     1 1
2     2 6
3     2 7 
4     3 4
5     3 5
6     3 6
7     5 1

Dotaz na A vzestupně B sestupně bude muset přeskakovat index mimo pořadí, aby vrátil řádky, a bude pomalejší. Například vrátí řádek 1, 3, 2, 6, 5, 4, 7

Rozsahový dotaz ve stejném pořadí jako index jednoduše vrátí řádky postupně ve správném pořadí.

Nalezení záznamu v BTree trvá O(Log(n)) čas. Nalezení rozsahu záznamů v pořadí je pouze OLog(n) + k, kde k je počet záznamů, které se mají vrátit.

Pokud jsou záznamy mimo provoz, náklady mohou být až OLog(n) * k



  1. upgrade mongodb

  2. Jak hledat hash klíče v redis?

  3. MongoDB $ měsíc

  4. Redis AOF fsync (VŽDY) vs. strom LSM