MongoDB架构下的分片优化实践(mongodb的分片)
MongoDB的分片是指把大数据分散到多台不同的物理机上,通过分片读取大数据,从而解决单台服务器不能存储大量数据,单个操作读取负荷大、性能难以满足期望等问题。本文主要介绍了MongoDB架构下的分片优化实践。
MongoDB架构下的分片优化,一般需要经过如下几个步骤:
1. 分区键的选择:可以通过一些性能分析工具,来寻找MongoDB数据量最大的分区键。这里分为两类:一类是唯一分区键,非唯一分区键;另一类是按照时间、地理位置等,从而将数据库分成几个区域。分区键的选择是整个MongoDB架构优化过程的基础。
2. 节点规划:如果采用备份方式,将一个主节点备份到另外一台服务器上,可以增加数据的容错能力,充分让用户利用存储设备;如果采用Sharding方式,就会分配许多Shard节点,这些节点会根据分区键的维度,分布到各个单元中。
3.数据索引:为了提高查询性能,应当根据检索的Key字段,主动创建索引。要根据频繁查询的字段,创建业务索引,以及按照collection中的_id字段,分区表的分区键创建索引。
通过上述步骤,MongoDB架构下的分片优化,用来解决数据读取时的性能问题,从而提升数据访问以及排序分析等等操作。如某一场景需要将单个集合的1.2亿条数据进行排序排名,并且每3秒统计和生成排名数据,可以通过将以上集合按唯一分区键分片,设置24个分片,使用 24个Shard节点,有效的将24次排序耗时从12分钟削减至1分钟左右:
// 连接MongoDB
client = pymongo.MongoClient(‘mongodb://localhost:27017/’)
// 建立index
db.users.createIndex({“name”: 1})
// 分片
sh.shardCollection(‘db.users’,{“name”: 1},{numInitialChunks: 24})
// 根据分片键来提交查询
query = {
name: {
‘$in’: [‘hello’,’world’]
}
}
// 进行排序
users.aggregate([
{$match: query}
{
‘$sort’: {
‘name’: -1
}
}
])
从上述代码可以看出,正确而有效的安排分片规划,能够有效的实现MongoDB架构下的分片优化。
总之,分片优化不仅可以提高MongoDB的性能,同时也可以实现数据的容错能力,个性化的数据划分。使用MongoDB进行数据分片,必须正确的实施,才能够最大限度的发挥其所提供的性能提升的作用。