如果您不需要永远保存数据(即您不介意数据“老化”),则可以考虑使用“上限收集”。上限集合具有许多限制,这些限制反过来又提供了一些有趣的好处,听起来似乎它们非常符合您的需求。@H_301_1@
基本上,一个有上限的集合具有指定的大小,并且按照插入顺序将文档写入其中,直到其填满为止,此时它会环绕起来并开始用最新的文档覆盖旧的文档。您对可以在上限集合中的文档上执行的更新有一点限制-即。您将无法执行会更改文档大小的更新(因为这意味着需要将其移动到磁盘上才能找到多余的空间)。我看不出这是您所描述的问题。@H_301_1@
这样做的结果是,您可以确保将上限集合中的数据按插入顺序写入磁盘并保留在磁盘上,这将使对插入顺序的查询变得非常快。@H_301_1@
顺便说一句,传感器及其产生的数据有何不同?如果它们相对相似,我建议将它们全部存储在同一集合中以便于使用-否则将它们分开。@H_301_1@
假设您使用单个集合,那么两个查询听起来都非常可行。要记住的一件事是,要获得有上限的集合的好处,您将需要根据集合的“自然”顺序进行查询,因此,按时间戳记键进行查询的速度不会那么快。如果以固定的时间间隔进行读数(因此您知道在给定的时间间隔内将读取多少个读数),那么我将为查询1建议类似以下内容:@H_301_1@
db.myCollection.find().limit(100000).sort({ $natural : -1 })
例如,假设您每秒存储100个读数,则上面的内容将返回最后100秒的数据。如果您需要前100秒,则可以添加.skip(100000)。@H_301_1@
对于第二个查询,在我看来,您需要MapReduce,但这听起来并不困难。您可以通过与上述查询类似的查询来选择所需文档的范围,然后使用该map功能按您感兴趣的时间间隔仅选择那些文档。@H_301_1@
这是有关上限集合的Mongo文档:http : //www.mongodb.org/display/DOCS/Capped+Collections@H_301_1@
希望这可以帮助!@H_301_1@