Mongo分库方案选型

 

Mongo分库方案两种形式分析:

 

1. mongo sharding方式:

1.1. 深翻页的问题

举例:当mongo的分片是5片时,分页查询(如果按照创建时间倒叙查询)第一页,每页50条数据,则mongo sharding在每个分片上取50条数据,一共50*5条数据,然后进行汇总,计算出前50条正确数据作为返回结果。如果是翻页到1000页,那么mongo sharding需要从5个分片上分别查询50*1000=5万条条数据,然后汇总成50*1000*5 = 25万条数据,然后计算第1000页的数据,这样系统会占用很大的系统资源,很容易造成系统异常。这个问题暂时没有什么可以解决的办法。

1.2. mongo sharding再平衡时,有可能查询数据出现重复的问题

当mongo sharding根据 sharding key,将数据存入mongo的5个片(1,2,3,4,5)时,一般会产生5个分片数据不均匀的问题,假如1,2的分片数据较多,3,4,5的分片数据量较少,那么mongo sharding再平衡策略会将1,2分片上的数据平衡到3,4,5分片上,如果此时数据正在进行平衡,那么查询1,2分片上的数据平衡到3,4,5的那部分的数据时,而且没有命中索引的情况时,有可能出现重复数据的现象。现有的解决方式是,在晚上调用量少的时候进行数据平衡,白天数据访问量大的时候关闭再数据平衡。

1.3. mongo分片扩展

分片不能够无限扩大,实际使用中一般分成个位数分片,很难做到无限扩展。

1.4. sharding的key不能变更

sharding key 一旦指定,不可更改。更改之后,访问数据的分片逻辑会变,导致服务不可用。
 

2. 采用物理分库方式:

2.1 分库要自己代码实现

需要自己代码中实现根据不同的context访问不同的数据库,即实现根据分库的key,路由到不同的物理库上。

2.2 不同的分库交叉访问问题

不能够像mongo sharding那样直接交叉访问库,如果要进行交叉访问库,只能在程序中自己实现。

2.3 负载均衡

mongo sharding内部实现了负载均衡,如果采用物理分成多个mongo库,实现负载均衡需要自己代码实现。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MongoDB的分片集群是一种将数据分布在多个服务器上的方式,以实现高可用性和横向扩展性。下面是一些关于MongoDB分片集群的常见问题和答案: 1. 什么是MongoDB的分片集群? MongoDB的分片集群是一种将数据分割成多个片段并分布在多个服务器上的方法。每个片段(shard)都是一个独立的MongoDB实例,可以存储一部分数据。通过将数据分散在多个片段上,可以实现数据的水平扩展和负载均衡。 2. 如何设置MongoDB的分片集群? 要设置MongoDB的分片集群,需要遵循以下步骤: a. 部署和配置一个或多个Config Server。Config Server用于存储集群的元数据,如分片键范围和配置信息。 b. 部署和配置一个或多个mongos路由器。mongos路由器是客户端与分片集群交互的入口点。 c. 部署和配置一个或多个shard服务器。每个shard服务器都是一个独立的MongoDB实例,可以存储一部分数据。 d. 启动mongos路由器,并将其连接到Config Server和shard服务器。 e. 创建分片集合,并根据需要启用分片。 3. 分片键是什么?如何选择分片键? 分片键是用来决定将数据分配到哪个片段的字段。选择合适的分片键非常重要,以确保数据在分片集群中均匀分布。通常,一个好的分片键应该满足以下条件: a. 数据均匀分布:分片键的值应该能够在不同的分片之间平均分配。 b. 查询性能:选择经常被查询的字段作为分片键,以便查询可以在单个片段上执行而不需要扫描整个集群。 c. 数据增长:选择一个能够支持数据增长的分片键,以避免在未来需要重新分片。 4. 如何监控和管理MongoDB的分片集群? MongoDB提供了一些工具和功能来监控和管理分片集群。一些常见的方法包括: a. 使用mongos路由器的命令行工具或管理界面来管理集群配置、添加/删除shard以及监控性能指标。 b. 使用MongoDB的内置监控工具,如mongostat和mongotop,来监视集群的吞吐量、延迟和负载情况。 c. 使用第三方监控工具,如Prometheus、Grafana等,来获取更详细的指标和可视化。 这些是关于MongoDB分片集群的一些常见问题和答案。希望能对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值