我想为我的 MongoDb 实现分片,需要你的一些建议。
洞察力
- 我们有很多 cron-job 收集关于机器的各种信息并将它们写入它自己的集合。
- 集合是动态创建的。
- 每个集合都有数百万个数据。
- 每个集合的 Structure1 是 Name、Category、Subcategory、NodeId、Process-Start-Time、Process-End-Time、Value。
- 每个集合的结构 2 是名称、类别、子类别、子类型、日期、值。
- 每个集合的 Structure3 是 Name、Category、Subcategory、NodeId、Process-Start-Time、Process-End-Time、Value、Flag1、Flag2、Flag3。
经过研究,我们发现我们将使用分片并使其对多个服务器有用,这保证了两件事:
- 不必担心空间不足。
- 跨服务器的平衡性能
问题一: 我的问题是找到一个正确的 shard-key 来对数据进行分区。除了默认的 ObjectId,我在集合中看不到唯一键。进一步阅读后,我发现可以使用复合键,将复合键或自定义 ObjectId 作为键是否有意义,其中值可能类似于 ObjectId:_。这对于返回查询结果和移动块的性能非常关键。
问题2: 由于我们的集合很大,动态创建集合时,每次在Mongo控制台设置分片会变得很困难。有没有办法让它在 mongo 中自动运行,以便每当为分片数据库创建集合时,它都会为该集合定义分片键?
问题3: 是否真的需要将shard-key传递给查询表达式?我认为我们没有在任何查询表达式中使用 ObjectId,我怀疑我是否可以使用唯一 ID,因为数据的结构不像传统数据库。如果是,它对这样的查询有何帮助:
例子:
{类别:“能源”,子类别:“瓦特”,过程开始时间:{$gte:132234234}}
提前感谢您介入并帮助我解决此问题。