代码之家  ›  专栏  ›  技术社区  ›  VP.

MongoDB作为循环数据库[关闭]

  •  1
  • VP.  · 技术社区  · 15 年前

    我使用MongoDB进行实时分析,我得到了500万 每天的数据点,未来将增加到1000万 最少。

    我的问题是:

    封顶集合是循环的,因此在 它达到了上限,我不想丢失这个数据。

    那么,我应该采取什么方法来保留旧数据,并避免这些数据被覆盖,但由于速度很快,仍然能够使用capped?

    我在想一个算法,比如:

    • 将当前集合重命名为旧集合并删除当前集合。
    • 将old附加到一个搜索友好(不加上限)集合
    1 回复  |  直到 15 年前
        1
  •  5
  •   Gates VP    15 年前

    我认为你这样做可能是错误的。为什么不为每个时间段创建一个新的集合,而不是试图“黑客”封顶集合呢?

    因此,如果您可以每天处理5-10M个数据点,那么只需创建一个集合,并将当天作为名称的一部分。你会得到 db.data20101001 11月1日之后 db.data20101002 11月2日。

    当您停止写入旧数据时,数据将“掉”出内存,并将停止使用RAM。用同样的方法,当前一天(可能是前一天)的索引可能总是在RAM中,因此插入将继续快速进行,同时仍保持历史记录。

    此解决方案所需的额外步骤:

    • 您必须在代码中编写一些逻辑以插入到正确的日期中(请注意,新集合是自己创建的,所以这非常简单)
    • 您需要设置一个删除旧数据的例行程序,通常可以追溯到n天,并执行以下操作: db.data20100901.drop() . 您将无法回收空间,但是Mongo将开始使用“较旧”的数据文件。

    因此,通过选择活动天数,您可以有效地管理集合的大小。

    推荐文章