Mongo分库方案选型

Mongo分库方案选型 Mongo分库方案两种形式分析: 1. mongo sharding方式:1.1. 深翻页的问题举例:当mongo的分片是5片时,分页查询(如果按照创建时间倒叙查询)第一页,每页50条数据,则mongo sharding在每个分片上取50条数据,一共50*5条数据,然后进行汇总,计算出前50条正确数据作为返回结果。如果是翻页到1000页,那么mongo sharding需要从…

大家好,又见面了,我是你们的朋友全栈君。

 

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库,实现负载均衡需要自己代码实现。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149535.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 载波频率与传输速率_频段带宽80

    载波频率与传输速率_频段带宽80频段  频段(Band)是指一段频率范围,比如LTE的FDD频段:  通信时不会直接拿一个Band来用,因此还会细分。信道带宽(ChannelBandwidth)  信道带宽限定了允许通过该信道的上下限频率,也即限定了一个频率通带。在一个频带Band中,可以灵活分配若干个不同的信道带宽。LTE系统支持信道带宽灵活可变,有6种可以配置,分别是1.4MHz,3MHz,5MHz,10MHz,15MHz,20MHz。较低的带宽1.4MHz和3MHz,可以方便CDMA2000使用的频谱迁移到LTE,同时帮

    2022年10月7日
  • 什么是java的多态

    什么是java的多态多态分为两种a.编译时多态:方法的重载;b. 运行时多态:JAVA运行时系统根据调用该方法的实例的类型来决定选择调用哪个方法则被称为运行时多态。(我们平时说得多的事运行时多态,所以多态主要也是指运行时多态);上述描述认为重载也是多态的一种表现,不过多态主要指运行时多态。2.运行时多态a.面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。…

    2022年7月7日
  • rsync远程同步文件_通过ssh传输文件

    rsync远程同步文件_通过ssh传输文件对于需要远程同步文件来说,我们常见的方式有scp或者rsync,但是想定时任务去同步的话,往往都需要设置免密登录,为安全起见,线上服务器没必要设置这个,且添加新的机器又要去设置免密,着实比较麻烦。采用rsync客户服务端的话,只需要设置一个密码即可。这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。rsync是一个功能非常强大的工具,其命令也有很多功能特色选项,…

    2022年10月13日
  • spring注解有哪些_Spring 注解

    spring注解有哪些_Spring 注解Spring注解@Configuration一.@Configuration的作用二.@Configuration的Spring容器启动方式三.不加@Configuration的@Bean的解

    2022年8月1日
  • python函数闭包_python闭包的使用场景

    python函数闭包_python闭包的使用场景闭包首先了解一下:如果在一个函数的内部定义了另一个函数,外部的我们叫他外函数,内部的我们叫他内函数。在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用

    2022年7月30日
  • python程序化交易实例-用 Python 实现你的量化交易策略「建议收藏」

    python程序化交易实例-用 Python 实现你的量化交易策略「建议收藏」Python的学习者中,有相当一部分是冲着爬虫去的。因为爬虫可以帮你解决很多工作和生活中的问题,节约你的生命。不过Python还有一个神秘而有趣的应用领域,那就是量化交易。量化交易,就是以数学模型替代人的主观判断来制定交易策略。通常会借助计算机程序来进行策略的计算和验证,最终也常直接用程序根据策略设定的规则自动进行交易。Python由于开发方便,工具库丰富,尤其科学计算方面的支持很强大,所…

    2022年10月8日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号