我们从大量主机收集和存储仪器数据。我们的存储是 MongoDB——几个带有副本的分片。一切都存储在一个大型集合中。我们插入的每个文档都是基于时间的观察,具有一些属性(测量值)。时间戳是最重要的属性,因为所有查询都至少基于时间。文档永远不会更新,所以它是一个纯粹的 write-in-look-up 模型。现在它可以很好地处理数十亿个文档。
现在,
我们希望增长一点,并保存长达 12 个月的数据,这些数据可能相当于可怕的万亿以上的观察(文件)。如果将所有东西都倾倒到一个巨大的集合中是最好的选择,或者有更聪明的方法来解决它,我一直在徘徊。我的意思是更智能 - 使用更少的硬件,同时仍然提供快速插入和(重要的是)快速查询。所以我考虑将大集合拆分成更小的部分,希望在索引、插入和查询速度上获得内存。
我研究了分片,但按时间戳分片听起来是个坏主意,因为所有写入都将进入一个节点,从而取消了分片的好处。插入率非常高,所以我们需要分片才能在这里正常工作。我还考虑过每个月创建一个新集合,然后为用户查询挑选一个相关集合。超过 12 个月的收藏将被删除或存档。还可以选择每月创建全新的数据库并进行类似的轮换。其他选择?或者也许一个大系列是真正变大的选择?
请分享您在类似应用中的经验和注意事项。