MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

L'indice sul campo ts in oplog.rs non è aggiornato

Come hai scoperto, gli indici secondari non sono supportati nelle raccolte di sistema come local.oplog.rs e *.system.profile . In MongoDB 2.4 e versioni precedenti gli indici sembrano essere stati creati, ma non sono mai stati effettivamente aggiornati. Le versioni più recenti di MongoDB (2.6+) restituiscono un errore se si tenta di aggiornare direttamente una raccolta di sistema con una modifica non supportata come il tentativo di creare indici aggiuntivi.

Il oplog.rs la collezione è decisamente "speciale" perché la sua destinazione d'uso è solo per la replica. Gli interni di replica fanno alcune ipotesi sulle operazioni previste per l'oplog su questa base. Ad esempio, la replica deve solo inserire voci oplog -- a differenza di una raccolta limitata che puoi creare tu stesso, le voci oplog sono mai aggiornato.

Le applicazioni dovrebbero leggere l'oplog con un cursore a coda se hanno bisogno di seguire le nuove voci che vengono inserite nell'oplog, o di trovare usando $natural ordine.

Il tutorial del cursore tailable entra in qualche dettaglio in più sull'utilizzo, ma alcuni punti particolari da notare sono:

  • I cursori a coda non utilizzano gli indici e restituiscono i documenti in ordine naturale.
  • Poiché i cursori a coda non utilizzano gli indici, la scansione iniziale della query potrebbe essere costosa; ma, dopo aver esaurito inizialmente il cursore, i successivi recuperi dei nuovi documenti aggiunti sono poco costosi