Também adicione um pouco mais ao baloo a resposta de.
Na questão do carimbo de data/hora vs. longa. Geralmente, o servidor MongoDB não verá diferença. O comprimento da codificação BSON é o mesmo (64 bits). Você pode ver um desempenho diferente no lado do cliente dependendo da codificação do driver. Como exemplo, no lado Java, usando o driver 10gen, um carimbo de data/hora é renderizado como
Date
que é muito mais pesado que Long
. Existem drivers
que tentam evitar essa sobrecarga. O outro problema é que você verá uma melhoria de desempenho se fechar o intervalo para o primeiro campo do índice. Então, se você usar o índice sugerido por baloo :
db.collection.ensureIndex({start: 1, final: 1})
Sua consulta terá um desempenho (potencialmente muito) melhor se a consulta for:
db.collection.find({start:{$gt:DateTime(...),$lt:DateTime(...)},
final:{$lt:DateTime(...)}})
Conceitualmente, se você pensar nos índices como uma árvore, o intervalo fechado limita os dois lados da árvore em vez de apenas um lado. Sem o intervalo fechado, o servidor precisa "verificar" todas as entradas com um
start
maior que o timestamp fornecido, pois não conhece a relação entre start
e final
. Você pode até descobrir que o desempenho da consulta não é melhor usando um índice de campo único como:
db.collection.ensureIndex({start: 1})
A maior parte da economia vem da poda do primeiro campo. O caso em que este não será o caso é quando a consulta é coberta pelo índice ou a ordenação/classificação dos resultados pode ser derivada do índice.
HTH - Rob.