我们收集并存储来自大量主机的检测数据。 我们的存储是MongoDB--带有副本的几个分片。一切都存储在一个大集合中。 我们插入的每个文档都是基于时间的观察结果,并带有一些属性(测量结果)。时间戳是最重要的属性,因为所有查询都至少基于时间。文件从不更新,所以它是一个纯粹的写入查找模型。目前它与数十亿文档合作良好。MongoDB - 单个巨大的原始数据集合。是否分裂?
现在,
我们要长一点,容纳12个月数据的可能构成一个可怕万条+的意见(文件)。 如果把所有东西都倾倒到一个单一的怪物收藏中,那么我是在徘徊,这是最好的选择,或者有更聪明的方法去实现它。通过更智能的我的意思是 - 使用更少的硬件,同时仍然提供快速插入和(重要的)快速查询。 所以我想将大集合拆分成更小的部分,希望能够获得索引,插入和查询速度上的内存。
我查看了碎片,但按时间戳分片听起来像一个糟糕的主意,因为所有写入操作都会进入一个节点,取消分片的好处。 插入率非常高,所以我们需要分片在这里正常工作。 我也想过每个月创建一个新集合,然后为用户查询选取相关集合。 超过12个月的收藏将被丢弃或归档。 还有一个选项可以每个月创建一个全新的数据库并进行类似的轮换。 其他选项?或者也许一个大集合是THE选项增长真正大吗?
请在类似的应用程序中分享您的经验和注意事项。
您的查询是基于时间的范围吗? – 2013-04-04 19:43:17
是的,时间是所有查询中的主要参数。另外,用户可以选择其他属性。例如,“从特定来源的最后一个星期日拿到东西,并有红色或温度低于零”。 – Dima 2013-04-04 19:55:55