Mongodb 有没有办法在Mongo中注册一个用于删除capped集合的回调?

Mongodb 有没有办法在Mongo中注册一个用于删除capped集合的回调?,mongodb,database,nosql,Mongodb,Database,Nosql,我想在Mongo中使用capped集合,但我不想在集合循环时文档消亡。相反,我希望Mongo注意到我已经没有空间了,将旧文档转移到另一个永久性的收藏中,以便存档 有没有办法让Mongo自动执行此操作,或者我可以注册一个执行此操作的回调?目前,MongoDB根本不支持触发器。如果您想在文档到达“cap”末尾之前将其移开,那么您需要自己监控数据使用情况 然而,我不明白为什么你会想要一个有封顶的收藏,还想把你的物品搬走。如果您在问题中澄清了这一点,我将更新答案。您不应该为此使用封顶集合。我假设您这样做

我想在Mongo中使用capped集合,但我不想在集合循环时文档消亡。相反,我希望Mongo注意到我已经没有空间了,将旧文档转移到另一个永久性的收藏中,以便存档


有没有办法让Mongo自动执行此操作,或者我可以注册一个执行此操作的回调?

目前,MongoDB根本不支持触发器。如果您想在文档到达“cap”末尾之前将其移开,那么您需要自己监控数据使用情况


然而,我不明白为什么你会想要一个有封顶的收藏,还想把你的物品搬走。如果您在问题中澄清了这一点,我将更新答案。

您不应该为此使用封顶集合。我假设您这样做是因为您希望将“热门”数据量保持在相对较小的范围内,并将过时的数据移动到永久性的集合中。然而,这实际上是使用MongoDB时发生的情况。经常访问的数据将存储在内存中,而不经常使用的数据将不会存储在内存中。如果你的指数保持正确的平衡,同样的情况也会发生。我认为您正在进行一些过早的优化,或者至少针对您的问题有一个次优的模式或索引策略。如果你把你想要达到的目标和你的表现下降的地方贴出来,我可以看一看

回答你的实际问题;MongoDB没有回调或触发器。不过,对它们还有一些开放的功能请求


编辑(技术实现的小细节):MongoDB构建在其存储引擎的内存映射文件之上。这基本上意味着它是一个基于LRU的“热”数据缓存,在这种情况下,数据可以是实际数据和索引数据。因此,您经常访问的数据和关联的索引数据(在您的情况下,您通常在封顶集合中拥有的数据)将存储在内存中,因此查询速度非常快。在典型用例中,拥有“活动”集合和“归档”集合以及只有一个大集合之间的性能差异应该很小。正如您可以想象的那样,mongod进程拥有更多的可用内存意味着更多的数据可以保留在内存中,从而提高性能。mongodb.org上提供了一些来自10gen的精彩演示,其中详细介绍了如何保持索引的正确平衡等。

只是好奇,为什么要使用封顶集合?我最近了解了封顶集合。我认为这对他们的性能有一些好处,但听起来真正的好处只是自动删除旧文档。这是真的吗?他们应该快一点,但是你没有切分的能力,但是这里有一个问题。正如@Remon van Vliet所说的,即使您有大量其他数据,您使用最多的数据也将具有高可用性。目前还没有现成的模式——我只是想了解Mongo的概念。从你的意思来看,我似乎不需要封顶收藏。在这种情况下,我将详细说明我的答案,说明为什么(通常)这会自行解决;)