2015-06-15 7 views
5

Ho due indici singoli per il campo "creato" nella mia raccolta. Un indice è ordinato in ordine crescente e l'altro è ordinato in ordine decrescente. L'indice che viene ordinato decrescente è più grande dell'indice ordinato crescente. Il campo creato contiene un oggetto Date Javascript. Cosa potrebbe causare questo?Perché l'indice su un campo deve essere di dimensioni diverse a seconda che sia crescente o decrescente in MongoDB

"indexSizes" : { 
    "_id_" : 212862160, 
    "created_1" : 136424736, 
    "created_-1" : 252376768 
}, 

Ecco i dettagli di collection.getIndexes(). L'unica differenza è che l'indice discendente è stato creato in background.

{ 
    "v" : 1, 
    "key" : { 
     "created" : 1 
    }, 
    "name" : "created_1", 
    "ns" : "Production.accounts" 
}, 
{ 
    "v" : 1, 
    "key" : { 
     "created" : -1 
    }, 
    "name" : "created_-1", 
    "ns" : "Production.accounts", 
    "background" : true 
} 
+0

Ora è una domanda giusta. Mi chiedo il motivo per cui la forma "ascendente" sia inferiore all'indice '_id' in termini di dimensioni. Per la cronaca, si potrebbe considerare che '_id' se un' ObjectId' è già "monotono" o "sempre crescente" e quindi un indicatore naturale di "ordine di creazione" nella propria raccolta. A meno che non sia necessario il timestamp per altri motivi, naturalmente. –

+0

qual è il tipo di valori memorizzati nel creato? Puoi ricreare questo? Ho provato con una semplice collezione mongo e le dimensioni dell'indice sono le stesse per ascendente/discendente. – jcalloway

+2

Gli indici di sfondo finiscono per essere più grandi di quelli creati in primo piano. Inoltre, non è necessario creare versioni ascendenti e discendenti poiché l'ordine non è rilevante per gli indici a campo singolo. – JohnnyHK

risposta

2

La differenza è dovuta alla creazione dell'indice ascendente in primo piano e alla creazione dell'indice discendente sullo sfondo.

Da the docs su sfondo creazione dell'indice:

indice Sfondo costruisce richiedere più tempo per completare e portare a un indice che è inizialmente più grande, o meno compatto, di un indice costruito nel primo piano. Nel tempo, la compattezza degli indici creati nello sfondo si avvicina agli indici costruiti in primo piano.

Quindi creare il proprio indice in primo piano se lo si desidera il più compatto possibile, ma anche un indice in background diventerà più compatto nel tempo.