MongoDB分片键选择指南

MongoDB分片键选择指南

特别是华为Mongodb4.0 集群的使用,更能提高查询效率

MongoDB是一款高性能的NoSQL数据库,能够处理大量数据并支持水平扩展。为了实现这一点,MongoDB使用了分片技术,而选择合适的分片键对性能和可伸缩性有着至关重要的影响。

第一步:理解分片的工作原理
MongoDB的分片是将数据分配到多个机器上,以提高性能和扩展性。分片键是使这些数据分布均匀和高效访问的关键。

第二步:分析应用程序的查询模式
在选择分片键之前,首先要分析应用程序的查询模式。通常要关注的点包括查询的频率、类型(例如,范围查询还是精确匹配)及其数据的大小。
Example:
//检查查询类型
db.collection.find({age:{$gt:25}})//范围查询
db.collection.find({name:"John"})//精确查询上述代码分别展示了应用程序的两种查询类型:范围查询和精确查询。

第三步:选择潜在的分片键
选择分片键时,应该优先考虑以下数据类型:
整数字段
字符串字段
日期字段
例如,如果我们有一个用户集合,其中包含"用户ID"和"年龄",我们可能会使用"用户ID"作为分片键。

第四步:在选择了潜在的分片键后,我们需要评估其有效性。合适的分片键应该满足以下要求:
高基数:确保数据分布均匀 50%
稳定性:值不应频繁更改 30%
常用性:在应用中经常被使用 20%

第五步:在MongoDB中设置分片
完成分片键选择后,需要在MongoDB中设置分片。下面是设置分片的代码示例:

//1.启用分片
sh.enableSharding("myDatabase");
//2.设置分片键
sh.shardCollection("myDatabase.users",{userId:1});
//3.验证分片设置
sh.status();

这段代码完成了分片设置的所有步骤。
第一步启用数据库的分片,第二步指定“userld”作为分片键,最后使用 sh.status()命令验证分片状态。

db.getCollection("book").getIndexes()
db.getCollection("book").createIndex({sku:1})

db.getCollection("book").find({"SiteCode": "US"},{Sku: 1,SiteCode: 1,ProductName: 1,KeywordList: 1}).skip(0).limit(10).sort({_id:1})
db.getCollection("book").find({"SiteCode": "US"}).skip(0).limit(10).sort({_id:1})

db.getSiblingDB("book").Com_Detail_US.find({Asin:{$in:[

"B08MVK8M8D",
"B09KRQSKNW",
"B0CB6MJ4X9"
]}}).sort({"Asin":1})

mongodb 分片集群
shard
范围分片:缺点导致一个节点频繁写,分片建可以是组合字段
hash分片:保证了随机性,写的分散,分片建只能是单字段
标签分片:
for(var i=0;i<1000;i++) {db.emp.insert({x:1)}
db.product.getShardDistribution() 查看mongodb 数据分布是否均匀
objectid:自动生成的_id由时间,计数器组成

mongodb 数据均衡器:=========
在执行数据库备份的期间,不能进行数据均衡操作,否则会产生不一致的备份数据。在备份操作之
前,可以通过如下命令确认均衡器的状态:

  1. sh.getBalancerState():查看均衡器是否开启。
  2. sh.isBalancerRunning():查看均衡器是否正在运行。
  3. sh.getBalancerWindow():查看当前均衡的窗口设定。
posted @ 2024-10-09 19:54  大树2  阅读(28)  评论(0编辑  收藏  举报