В чем преимущество ttl коллекции mongodb? против очистки данных от домохозяйки?

Я думал об использовании функции сборки в TTL, но динамически изменить дату истечения срока нелегко. Поскольку mongodb использует фоновую задачу для очистки данных. Есть ли недостаток в том, что я просто кодирую свою собственную функцию очистки, основанную на "> sure_date", и запускаю, скажем, раз в день? Таким образом, я могу динамически изменять значение TTL, и это поле даты не должно быть одноиндексным. Я могу использовать это поле как часть сложной индексации, чтобы минимизировать количество индексов.

12 голосов | спросил user2833162 1 +04002013-10-01T05:49:40+04:00312013bEurope/MoscowTue, 01 Oct 2013 05:49:40 +0400 2013, 05:49:40

2 ответа


0

Существует два способа установить срок действия в коллекции TTL .

  1. на глобальном уровне при создании индекса
  2. для документа, как поле в документе

Эти режимы являются эксклюзивными.

Глобальный срок действия

Если вы хотите, чтобы срок действия всех ваших документов истек через 3 месяца после создания, используйте первый режим, создав индекс, как показано ниже:

db.events.ensureIndex({ "createdAt": 1 }, { expireAfterSeconds: 7776000 })

Если позже вы решите изменить срок действия на «4 месяца», вам просто нужно обновить значение expireAfterSeconds, используя команда collMod :

db.runCommand({"collMod" : "events" , "index" : { "keyPattern" : {"createdAt" : 1 } , "expireAfterSeconds" : 10368000 } })

Срок действия каждого документа

Если вы хотите, чтобы у каждого документа была своя дата истечения срока действия, сохраните указанную дату в поле, например «expiresAt», а затем индексируйте свою коллекцию с помощью:

db.events.ensureIndex({ "expiresAt": 1 }, { expireAfterSeconds: 0 })
ответил Daniel Coupal 1 FebruaryEurope/MoscowbSat, 01 Feb 2014 00:21:51 +0400000000amSat, 01 Feb 2014 00:21:51 +040014 2014, 00:21:51
0
  

Я думал об использовании функции сборки в TTL, но динамически изменить дату истечения срока нелегко

Странно. Почему это будет проблемой? Если в вашем документе есть поле Expires, вы можете обновить это поле в любое время, чтобы динамически продлить или сократить срок действия документа.

  

Есть ли недостаток в том, что я просто кодирую свою собственную функцию очистки на основе "> sure_date" и запускаю скажем один раз в день?

  1. Вы должны кодировать, документировать и поддерживать его
  2. Удаление большого количества документов может быть дорогостоящим и привести к повторному заказу. Вероятно, полезно проводить очистку чаще

Минимизация количества индексов - это хорошо, но вопрос в том, действительно ли это стоит усилий. Только вы можете дать ответ на этот вопрос. Мой совет: начните с того, что уже есть, если это возможно, и придумайте что-нибудь лучше, если и только если вам действительно нужно.

ответил mnemosyn 1 +04002013-10-01T12:51:43+04:00312013bEurope/MoscowTue, 01 Oct 2013 12:51:43 +0400 2013, 12:51:43

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132