【问题标题】:Setting ttl on a mongoDB collection - in application or shell?在 mongoDB 集合上设置 ttl - 在应用程序或 shell 中?
【发布时间】:2013-05-17 07:46:44
【问题描述】:

我想为集合设置 ttl一次,在构建使用 mongoDB 的 java 应用程序时,实现此目的的惯用方法是什么? ppl 是否只是在 shell 中应用这些设置?或者在应用程序代码中检查集合是否已经在数据库中是正常的,如果没有,则使用所需的选项创建它?

谢谢!

【问题讨论】:

    标签: java mongodb


    【解决方案1】:

    我再也不会在我的应用程序代码中构建索引了。

    我承认我曾经这样做过。每次我的应用程序启动时,我都会确保我的所有索引,直到有一天,一位初学者开发人员掌握了我的代码,并意外删除了我的一个索引序列中的一个字符。

    因此,由于在前台处理此索引构建,整个集群冻结并停机。幸运的是,我有许多延迟和非索引构建从站需要修复,但我总共损失了大约 12 小时,进而损失了 12 小时的工作时间。

    我建议您不要在应用程序代码中构建索引,而是在您的 mongo 控制台中仔细构建。这适用于任何这样的操作,甚至是 TTL 索引。

    【讨论】:

    • 感谢您的建议,我们也会这样做。
    • 虽然这是一个旧线程,但答案仍然相关。但是,这种方法是否适用于集群环境?也许是的,但难度很大,因为您必须先知道哪个是主节点,然后才能在控制台上执行此操作。如果您使用部署工具,则必须先将其配置为查询谁是主要的,然后才能应用 ttl。如果您没有集群,那么确保使用 js 文件的控制台方法就可以了。
    • 我想说,如果你给了一个集群,你应该像你暗示的那样,使用一个可以正确管理集群及其属性的工具。索引在集群中变得复杂 100 倍
    • 想知道更改是如何在投入生产之前成功通过代码审查的...... :-)
    • @RZet 没有人是万无一失的,即使是我自己的编码我也注意到了这样的问题,有时一个错误可能会导致它受到刺激,而且由于你的想法,拼写错误几乎不可能看到它们即使在复习时也可能正确阅读(您可以通过第一个和最后一个字母来阅读英文,科学家发现大多数人都这样做)因此它很容易通过
    【解决方案2】:

    您可以按照here 的文档为集合设置 TTL。

    使用Java驱动,我会尝试:

    theTTLCollection.ensureIndex(new BasicDBObject("status", 1), new BasicDBObject("expireAfterSeconds", 3600));
    

    hth.

    【讨论】:

    • 对不起,我的问题有点不清楚。我更多的是在寻找 when 这应该在应用程序中完成。应用程序在数据库中设置集合的 init() 是否正常(如果它们不存在)?因为我只想应用一次这样的设置,而不是每次将记录添加到集合中。)
    【解决方案3】:

    设置TTL 是一个索引操作,所以我想每次代码运行时都这样做是不明智的。

    【讨论】:

    • 如果多次运行,它将被注册为无操作,因此不会出现任何性能问题
    猜你喜欢
    • 2014-05-07
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    相关资源
    最近更新 更多