• ᯤ⁵ᴳ
    2022-07-02
    ShardingJDBC 似乎没有 myCat 性能好啊

    作者回复: 你好,这个你有做过压测没,这两款我都在公司运用过,根据在优速,中通的实战经验来看,ShardingJDBC的优势还是要比mycat要好太多,因为中心化,需要引入大量的资源保障mycat自身的高性能,而且一但出现问题,将是比较致命的,而且不太好快速恢复。

    共 3 条评论
    6
  • 文涛
    2022-06-15
    mycat似乎N没更新了,现在分表分库还是几年前那套理论?而且还是Java体系的!TiDb等新兴数据库了解一下!

    作者回复: 你好,MyCAT我最近也关注的比较少,只是借此分析了一下分库分表的一些发展。也感谢你给大家提供了更新的技术,号称解决了传统分库分表类似跨库JOIN,值得深入研究。

    
    5
  • 第一装甲集群司令克莱...
    2022-08-24 来自上海
    运维戏称:珍爱生命,远离mycat

    作者回复: 这位兄台一定用过MyCat,MyCat这款中间件对我的职场有极大的推动作用,但要在生产环境中进行数据库分库分表,我也不会选择mycat,如果目前公司已经使用了mycat,通常要推动用户进行sql规范,通常数据量大的场景,建议实时业务使用单表操作,尽量避免使用join,查询可以通过异构,降低对数据库的依赖。

    
    1
  • Mr.Hwang
    2022-09-07 来自上海
    其实选择ShardingSphere或CAT更多考虑的层面是从数据库治理去考虑的,ShardingJDBC也还是没办法做治理的。

    作者回复: 嗯,对的,通常建议是代码中使用shardjdbc就好,但在运维管理层面,可以部署一套shardingsphere,方便进行数据查找。

    
    
  • 哈哈哈
    2022-08-27 来自上海
    丁老师,之前我用过的分库分表中间件也是集成在业务系统上的,但也有一个统一运维平台,这个平台可以提交分库分表规则,就是一段代码,根据uId/mid确定是哪个库/表,貌似也没有运维问题;另外分成1024个表这个数字有点奇怪,我理解要么是百库百表or千库千表,1024不太好配置规则吧。

    作者回复: 你好,你们公司技术还是可以的,不过我在想你们自己实现的这个类库,要实现复杂的sql语句,应该有点难度吧,例如多层嵌套sql等。这个数字,其实就是一个 hashcode % total,这个total用1000,100还是1024,本质上没有啥差别的,我们公司1024张表,分布在16个物理库上。

    
    
  • qiuzeliang
    2022-07-29 来自上海
    写一个类就可以处理根据订单编号路由到对应的表,为啥要引入数据库中间件? 个人觉得以这个理由引入数据库中间件不够充分

    作者回复: 首先我觉得你说的没错,如果只是实现订单表一个单表的路由一个类缺少很容易。但一个表的语法不只单表插入与查找,还有各种各样的join、子查询,分组等,要实现这些功能,就比较困难了,再者说我们项目中肯定不只一个表,要完成多个表,而且随着场景的增多,你这个类的维护就会比较困难,后面容易被这个技术需求所拖累,进而影响业务功能。我的想法是专业的人做专业的事情,一些共性的技术需求交给专门研究这方面的大牛写出来的中间件。

    
    
  • 李二木
    2022-06-15 来自上海
    如果要高可用就是多副本方式

    作者回复: 你好,你这么说也没错,当然如果说的比较严谨的话,我觉得可以再细分一下。 其实RocketMQ的主从同步,我们可以通过多主多从一样可以实现高可用,我们将一主一从当成一个复制组,如果主节点宕机,写入流量会转移到其他主节点,并且从节点可以继续消费。 当然多副本,比主从同步更加厉害的一点是,在复制组内可用进行主从切换,可以避免因一个复制组宕机而给其他复制组带来更大的流量压力。

    共 2 条评论
    
  • c梦
    2022-06-13 来自上海
    文章片段:「举个例子,如果订单表被分成了 1024 个表,这时候如果你想根据订单编号去查询数据,必须人为计算出这条数据存在于哪个库的哪个表中,然后再去对应的库上执行 SQL 语句。」 老师,您好,这里我没太懂,为什么需要人为计算出数据库存在于哪个表,因为 sharding-jdbc 应该是可以根据配置知道有哪些库哪些表的,然后根据他的算法计算出去哪个库表执行sql的吧?我没有用过 sharding-jdbc,可能是理解有偏差?

    作者回复: 你好,你的理解没有错。上面是指没有使用shardingjdbc这样分库分表组件时需要做的事情,也就是抛出分库分表的一些共性需求,后面业界大神找到了很多通用的解决方案,shardingjdbc,mycat这样优秀的中间件营应运而生。

    共 4 条评论
    
  • 李蕾
    2022-11-03 来自广东
    分库分表都能够环节写入的压力,其中分表主要是能够降低表锁或者间隙锁的锁竞争,从而缓解写入压力。 我在业务中基本使用的都是ShardingJDBC,使用过程中直接将分库分表的逻辑配置好,具体的路由就由ShardingJDBC实现,但是这里需要注意线程池的配置,防止数据库连接数爆炸的问题,这个也是我在业务上踩过的大坑,一般的措施是在接口侧增加限流; 这里我理解,分布式架构设计更多的还是要从实际业务出发,将通用能力抽取,减少与业务的耦合,然后不断优化为一款好的产品。 虽然当前有TiDB等分布式数据库的出现,但是由于社区、技术积累等等方面的原因,MySQL依旧还是最为常用的数据库,了解常用的分库分表的中间件还是很关键的。
    
    4
  • Master
    2022-07-14
    有些不严谨,分库能缓解写入压力我能理解,分表不能吧。。。另外mycat和ShardingJDBC的选择更多的是综合性的选择结果,并没有绝对的好坏,sharding的方案会让数据库的连接数大幅上升,对于连接池的设置要异常谨慎,还有就是应用程序在扩容的时候实际上需要非常小心,连接数的飙高会直接影响mysql性能,而mycat一般没有这些问题。至于性能。。本质上来说还是DB的性能是大头,和中间件无关,中间件不会连数据库都跑不过吧 0 0...链路较长性能有损是常识,但高性能中间件一般都会注意这个,是不是你测试的时候设置不对啊,有做过不同设置下对比么,如果有损是否可以到不可接受的地步?。。。。 还有就是目前的云原生数据库的发展很快,文章中提到的一些问题可能目前不是问题了。。
    共 4 条评论
    4