Закрытые коллекции - BsonId, уникальность и индекс - PullRequest
1 голос
/ 11 марта 2012

Я хочу использовать ограниченную коллекцию в качестве хранилища кеша, планирую выбрать с использованием составного индекса - ключа и даты окончания срока действия.Поскольку невозможно обновить / удалить из закрытой коллекции, я добавлю новые записи с новыми датами истечения и просто выберу запись с будущим истечением.

1) Это оптимальный способ создания индекса, если я 'будете использовать Query.GTE("expiry", DateTime.Now) в запросе?

cacheColl.EnsureIndex(new IndexKeysBuilder().Ascending("key").Descending("expiry"));

2) Нужен ли атрибут [BsonId] для класса?Я знаю, что «ключ» не будет уникальным.Должна ли запись иметь уникальную запись идентификатора ??предметы сам.Есть ли причина предпочитать регулярную коллекцию и обновлять элементы / удалять просроченные?Даже если я удаляю документы, я читаю, что пространство не освобождается (нужно ли сжимать?)

1 Ответ

0 голосов
/ 12 марта 2012

1) Индекс выглядит примерно так. Вы также можете добавить сортировку по убыванию и ограничить 1 запросом, если вас интересует только последнее.

2) Нет. В закрытой коллекции _id не создается автоматически и не требуется. Причина, по которой мне нужно быть уникальной в обычных коллекциях, заключается в том, что по умолчанию для этой коллекции создается уникальный индекс _id.

3) У обоих подходов есть свои плюсы и минусы, и то, что лучше, полностью зависит от ваших потребностей. Одна вещь, которую вы, возможно, захотите рассмотреть в отношении ограниченной коллекции, это то, что будет нелегко изменить размер коллекции после ее создания. Это будет проблематично, если позже вы поймете, что изначально установленный вами размер был слишком мал, чтобы поместиться в нужный вам интервал времени.

P.S. Вы правы в том, что пространство, используемое экстентами удаленного документа, не освобождается. Однако Mongo отслеживает эти экстенты и использует их по мере возможности.

...