• QQ怪
    2019-08-15
    没有什么大厂经验,看了老师的分享的确对大厂数据库分库分表设计有一定的理解和提高
    
     8
  • QQ怪
    2019-08-15
    现在Fescar已经改名为Seata

    作者回复: 看来成长比较迅速呀。这个开源中间件比较新,去年刚开源的时候了解下源码,顺便实践了基本功能。

    
     7
  • mmilan
    2019-08-28
    老师说"我们在最开始设计表数据量时,尽量使用 2 的倍数来设置表数量。当我们需要扩容时,也同样按照 2 的倍数来扩容,这种方式可以减少数据的迁移量",不是很理解为什么按2的倍数,就能减少数据的迁移量?

    作者回复: 我们的分表一般是根据[字段的hash值%表数量]或来进行分配的。

    假设某分表字段的哈希值4、8、12,原来的表数量为4,所以这几个数据都会在一个表中。当扩容到8时,只有12会迁移到第五张表中。

    如果扩容到6张表的话,此时哈希值为4的数据会迁移到第五张表,哈希值为8的需要迁移到第三张表,只有哈希值为12的不需要迁移。

    
     6
  • 咬尖月牙儿
    2019-08-15
    老师,可以用tidb这种newsql取代分库分表的方案吗

    作者回复: 可以的,TiDB是一种集中式的数据存放解决方案,可以节省开发人员很多工作量。

    
     5
  • Jxin
    2019-08-22
    1.中间件应该就mycat,sharding jdbc应该属于基础框架来使用。
    2.提个问题,公司禁用分区,不知为何,但结果就是相关知识忘光光。本章刚好也有提到,顺带麻烦老师介绍下分区,这块反而成薄弱点了。

    作者回复: MySQL的表分区存在一些限制,常见的有:分区字段不能为NULL,避免建立和分区列不匹配的索引。

    除此之外,底层实现的表分区,对MySQL来说其实是一个性能消耗的过程,特别是范围分区,服务器需要扫描所有的分区定义的列表来确定具体的分区。

    表分区在操作数据过滤之前,是需要打开并锁住所有底层表的,这个过程是在分区过滤之前发生的,所有是一个非常消耗性能的过程。

    分区表的维护成本也是很高的,特别是重组分区。

    总之,MySQL的表分区实现偏底层,定制不灵活且性能不是很好,维护成本高。所以很多DBA不建议使用。

    
     2
  • 明天更美好
    2019-08-15
    个人感觉单表超过500w就要分表,不然对于性能有要求的业务来说性能太差了。单库数据超2T,就得分库。这样的话可能更合理些
     4
     2
  • 失火的夏天
    2019-08-15
    用过阿里的DRDS,它只支持一个字段作为分库分表键,不能多个字段同时分库分表,而且不支持分布式事务,如果要修改分库键的值,就要先插入再删除,或者先删除再插入。插入,更新,查询的时候都要带上分库键。不过好像有个参数可以控制是不是一定要带分库键,大概就了解这么些。
    
     2
  • Demon.Lee
    2019-09-18
    泪奔,之前用微服务开发产品遇到的难点全中,要是早点看到专栏就好了,人生啊~~~
    
     1
  • godtrue
    2019-09-15
    我使用过公司基础架构部自研的数据库中间件,对于分库分表的的数据查询可以动态路由,不过也就是动态路由,对于join的支持有限,另外分布式事务保证的也一般般。不知开源产品中有哪些佼佼者,功能多性能高?

    作者回复: sharding-jdbc\mycat在行业内使用比较多,各有优势

    
     1
  • 儿戏
    2019-09-05
    老师,请问下 订单表用 用户ID 做hash 分库分表后,订单的item表会成倍增长,造成的数据倾斜,怎么解决?做2次分表吗?

    作者回复: 一般我们都是采用hash求余的方法来实现分库分表,如果在生产环境中出现数据倾斜比较严重,我们需要考虑使用一致性hash算法实现分库分表,也是二次分表的一种实现,只不过可以对局部倾斜数据进行二次分表,实现起来方便,且只影响部分表数据。

    
     1
  • 一眼万年
    2019-08-19
    老师,mysql单表最大储存性能分析能详细点,而不是简单一句性能能B+树深度有关
    
     1
  • 许童童
    2019-08-15
    我们的系统前期没设计好,现在想分库分表很难,大量join查询,很难处理。
    想用阿里云的分页式rdbms,不知道可行性。

    作者回复: 前期没有做好分表的准备,后面做表升级工作量就大很多,而风险更高。

    例如一个表如果是自增主键ID,而主键ID又跟其他业务表做了耦合,当我们要做表升级时,需要用另外一个字段做分表字段,这时候就存在主键ID在分表后可能存在冲突的问题。 所以一开始我们就要想到这张表有可能需要做表升级,在做表关联时用另外一个非自增主键ID做关联,或者使用全局自增ID或雪花算法统一获取全局主键ID。

    阿里云的数据库暂时没有用过,多了解支持的一些功能,匹配下是否更适合自己的业务。

    
     1
  • 皮卡皮卡
    2019-09-26
    GitHub上搜snowflake已经淘汰了

    作者回复: 可以自我实现一个snowflake工具类,理解雪花算法的原理即可

    
    
  • 再续啸傲
    2019-08-30
    mycat。但是低版本的mycat存在一些聚合函数无法使用的问题
    
    
  • 小橙橙
    2019-08-16
    老师,您好。我没有分库分表的经验。有些实践经验向您请教一下。分库分表的数量有上限吗,比如拆分了多少个库之后,查询性能也没有办法再提高了。

    作者回复: 理论上来说,不跨表垮库查询,是没有数量上限,因为路由是不会存在数量越多性能越慢的情况。

    
    
  • 梦醒时分
    2019-08-16
    自己调研过Mycat,个人感觉挺好用的。生产上没用过,不知道稳定性怎么样

    作者回复: mycat是一个中间代理层,存在中间相互通信的性能损耗,其他方面挺好的。

     1
    
  • 明天更美好
    2019-08-15
    有个问题请教下,对于分库分表来说主键需要严格递增,不然数据会发生倾斜的,造成部分库数据过多。雪花算法虽然好,但是只是趋势递增的,那怎么才能做到严格递增呢?并且对性能上有一定要求。

    作者回复: 正如文中提到的,可以通过数据库或缓存来实现严格的递增,但会有一定的性能消耗。鱼和熊掌两者不可兼得,目前雪花算法是一种折中解决方案。

    
    
  • 门窗小二
    2019-08-15
    用了sharding jdbc ,但实际实现的时候尽量还是考虑单库
    
    
  • 胡峣
    2019-08-15
    用了段时间shardingjdbc,最后还是回归了单服务单库
     2
    
我们在线,来聊聊吧