这7个问题难以解决!分库分表也没吹的那么神……

为什么需要分库分表?是因为MySQL等数据库单库单表能支撑的系统并发量和数据存储量存在瓶颈。

中国有超过10亿的网民,单日交易量超过百万、千万单的交易场景越来越多。按照一行数据1K,每日订单量500万计算,一年需要的数据存储为1700G,行数1.7亿。

显然此种情况MySQL单库单表难以保证查询写入性能。一张表一年的数据量恐怖如斯,交易场景成百上千张表,年复一年,所带来的存储和并发量压力何其巨大呢?业务牵引技术的发展,分库分表技术应运而生。

目前分库分表技术似乎成为行业标准,站在鄙视链上游。不分库分表的系统似乎都是毫无亮点的垃圾系统,然而真的如此吗?

分库分表技术是完美的解决方案吗?它有哪些不足之处?

为什么单库单表存在系统瓶颈,就选择分库分表呢?有其他更好的方案吗?

一、分库分表难以解决分布式事务问题

一般情况下通过选择合适的分片属性,可以保证业务在一个数据库内完成事务操作。

如用户领券场景,用户一次领取3张优惠券,系统写入3条优惠券记录和一条领券流水,使用UserId进行分库分表,可以保证同一个用户的4条记录路由到同一数据库,可使用MySQL本地事务即可保证数据一致性。

然而**当同一个事务中多张表的分片属性不同时,难以保证这些表在同一个数据库内完成事务操作,势必会出现难以解决的分布式事务难题**。

如优惠券存在库存,在发券时需同时扣减券库存,库存粒度为券模版ID,用户可同时领取多个券模版的券。如何保证库存扣减、用户发券、领取流水等在同一个数据库内完成呢?难以实现

优惠券和领券流水,基于UserId拆分数据库,但库存表无用户属性,只能使用券模版ID分库。然而不同的分片属性,无法保证在同一个数据库完成事务操作,难以保证数据强一致性。

因此当同一个事务中多张表的分片属性不同时,难以保证这些表在同一个数据库内完成事务操作,势必会出现难以解决的分布式事务难题。即便业务侧使用复杂的业务架构也难以实现强一致性,作出妥协后,可实现最终一致性。

分库分表技术把数据库解决不了的问题推到业务侧,“胁迫”业务侧使用复杂方案参与解决,要求业务侧在数据一致性上作出妥协

二、分库分表难以实现非分片属性的索引查询能力

电商交易场景一般使用UserId作为分片属性,联合索引的前缀都是UserId,但这并不绝对,交易场景中存在品牌、门店、司机、配送等其他维度。

如订单表使用UserId作为分片属性进行分库分表,查询商家在最近1小时的订单如何实现呢?由于使用UserId分库分表,当使用商家ID查询时,需要查询所有的分库分表,这显然不现实。

业务侧有几种实现方案,1)使用商家ID分库分表,异构另一份MySQL存储2)基于ElasticSearch,异构另一种存储支撑其他维度的检索场景。

无论哪一种方案都会导致,数据一致性降低,但系统复杂度增加。

查询商家最近1小时的订单,业务上如此简单清晰的需求,在分库分表后,实现方案竟如此复杂。此外还要求业务在数据准确性上作出妥协。

正是因为分库分表技术的先天不足,所以极大地增加了业务系统架构的复杂性。(甚至很多人以架构复杂为荣,错误的认为系统越复杂越能体现架构能力)

此外还有其他更加tricky的方案,如为了实现订单Id查询,在生成的订单Id中存放UserId后四位(大概意思),用于定位订单在哪个分片。

三、分库分表导致的全局主键问题

MySQL主键支持自增ID,但是这一特性在分库分表后沦为鸡肋功能,系统需要分布式方式的ID生成器。

如优惠券系统在分库分表后,优惠券ID需要借助分布式ID生成器生成全局唯一ID。常见的实现方式包括UUID、雪花算法、美团Leaf、百度UidGenerator等。除维护业务系统外,还需要维护其他纯技术类系统。

毫无疑问,这再次增加架构的复杂性。

四、分库分表难以建立全局唯一键约束

除全局主键问题,全局唯一键也难以实现。当全局唯一键的前缀是非分片属性时,难以实现全局唯一键。

例如订单在履约完成后,会生成一笔履约单。系统明确一笔订单只能有一笔履约单,因此履约单上的订单ID字段应该增加唯一键约束。然而履约单在基于UserID分库分表后,OrderId建立的唯一键约束只在本表内唯一,不能保证在所有的分片内实现全局唯一。

因此分库分表后,数据库无法对OrderId等非分片属性建立全局的唯一性约束。

除以上具体场景外,分库分表面临的难题依然有很多,如扩容难问题、存储成本高、运维成本高、高可用难等等问题。

五、分库分表需要持续造轮子

选择分库分表后,需要业务系统开发和接入很多轮子,包括

ShardingSphere、mycat等方便客户端接入分库分表。如果使用ShardingSphere需考虑多种语言多套轮子,使用Mycat代理层方案又会面临性能风险。

分布式ID生成器生成全局ID

为了支持非分片查询,需要DTS消费binlog,异构存储For查询。

使用ElasticSearch用于其他维度检索。

分库分表管理后台支持查询数据、修改数据

分库分表管理工具支持高效建表、修改表、加索引等DDL操作。(1000张表后,手动建表不现实)

……

层出不穷的问题,需要层出不穷的轮子,有些轮子需要自己造,如分库分表管理工具等。

不禁要问,互联网大厂能承受如此复杂架构方案,所有的公司都能承受吗?导致架构如此复杂的根源是什么呢?分库分表方案上的先天不足

六、分库分表后面临老大难的扩容问题

在系统建设之初,一个合格的架构师必须考虑到:未来数据量庞大后的存储扩容问题。这往往让人很难抉择,因为要权衡当下的硬件成本和未来扩容成本。

使用分库分表后,扩容非常困难。如8个数据库,想继续拆分为16个数据库,一定会对业务造成影响,停机迁移是难以避免的问题,需要极多的运维工具保障扩容过程的安全性和快速性,做到对业务影响程度最低。因此扩容成本和风险都极高。

如果在系统建设初期就拆分为16个库,又会面临硬件和运维成本过高的问题。如果每一个业务在系统建设初期都如此铺张浪费,那么公司的硬件成本将极高。

七、大量分库分表导致运维成本激增

研发视角和DBA视角不同,结论不同。业务研发更多考虑容量不足和并发度不足风险,会倾向于设置较大的分库分表规模,而DBA会考虑运维成本、硬件成本,希望数据库规模在可控范围内。两者站在不同的视角,各有理由,这是一个矛盾。

我相信大多数业务研发不清楚,自家公司MySQL单库单实例的最高并发度,最高容量,在设置分片规模时往往是拍脑袋决定。只要研发定的分片方案不离谱,往往DBA也就接受了。

这些决策中,往往还掺杂历史问题。如团队已经有了10个库,无论业务规模如何,新表默认拆分10个库,而不会考虑是否真的需要10个库。

八、为什么业务系统要替数据库负重前行?

分库分表技术把数据库解决不了的问题推到业务侧,“胁迫”业务侧使用复杂方案参与解决,要求业务侧在数据一致性上作出妥协。

为什么单库单表存在系统瓶颈,就选择分库分表呢?有其他更好的方案吗?分布式数据库。

分布式数据库继承了传统单机数据库的核心特性,同时还拥有分布式系统的处理能力。虽然起步较晚,可以预见的是它将是数据库下一个发展方向。

如阿里的OceanBase基于两阶段提交协议解决了分布式事务问题,提供了比肩本地事务的强一致性,此外还提供以下能力解决了分库分表技术难以解决的问题1、2、3、4。相比分库分表,业务侧使用分布式数据库的门槛更低。

提供了全局索引,可以为非分片属性提供全局的索引和唯一性约束

提供了全局自增主键,无需分布式ID生成器。

OceanBase在性能、扩容能力、运维和硬件成本上,相比分库分表有更优的表现

单机数据库能支撑的并发量和存储量的天花板很低,分库分表和分布式数据库是解决此类问题的两种方案。分库分表通过分库分表中间件及一系列轮子整合了独立的数据库实例,可解决并发量和存储量的难题,但是牺牲了一致性,增加了使用门槛。而分布式数据库则直面困难,使用分布式集群架构在解决并发量和存储量挑战的同时,也提供了类比单机数据库的使用门槛和强一致性事务能力。

就像ElaticSearch替代Lucene,RedisCluster替代单机Redis一样,低门槛、强一致性、支持高并发大数据量存储的分布式数据库一定是数据库的主流发展方向。

分库分表更像是开源数据库技术落后互联网业务发展时,不得已的临时过渡方案。

THE END
1.贰降风险评估分析目前估计全国有心血管病患者2.9亿,其中高血压患者2.7亿,卒中患者至少700万,心肌梗死患者250万,心力衰竭患者450万,肺心病患者500万,风湿性心脏病患者250万,先天性心脏病患者200万。每5个成人中有1名患心血管病。 掌握健康危险因素的识别方法 熟悉我国居民存在的主要健康危险因素 ...https://www.meipian.cn/2j8awwtw
2.关系型数据库与Elasticsearch组合使用要点关系型数据库局限性 1.关系型数据库支持有限度的关联查询,一般在业务应用系统中,关联表会控制在 2~3 个表(有 3 个表关联的业务场景需要评估是否容许,开发工程师只容许 2 个表关联),且单表的数据量要平衡考虑,跨同构数据库源关联不容许,而跨异构数据库源更是有心无力。 https://www.jianshu.com/p/34586334daa9
3.“信息安全”课程习题及参考答案网络信息安全doc消息认证是 验证信息的完整性,即验证数据在传送和存储过程中是否被篡改、重放或延迟等。 MAC函数类似于加密,它于加密的区别是MAC函数 不 可逆。 10.Hash函数是可接受 变长 数据输入,并生成 定长 数据输出的函数。 三、问答题 1.简述主动攻击与被动攻击的特点,并列举主动攻击与被动攻击现象。 http://read.cucdc.com/cw/62655/104021.html
4.舟山烟草ACP数据训练某医院的数据库中有一张记录看病人信息的数据表,包含了字段病人编号()、姓名(Name)、性别(Gender)、手机号(Phone)和住址(Address),该表中记录着六个病人的数据,仅有一个病人的手机号缺失,则该表的关系完整性为_ A.5/6 B.4/5 C.29/30 D.1/6 15. 分析师需要对各个省份及各个地区的住房市场和居民住房...https://www.wjx.cn/jq/116694900.aspx
1.关系数据库模型的特点是什么腾讯云开发者社区在数据库中元组被用来代指行,属性则被用来代指列。用关系实例这个术语来指代一个关系的特定实例。也就...https://cloud.tencent.com/developer/ask/2147736
2.关系型数据库和非关系型数据库详解关系型与非关系型数据库关系型数据库和非关系型数据库各有千秋,选择哪种数据库技术取决于具体的应用场景和需求。关系型数据库在事务处理和复杂查询方面表现优异,适合结构化数据和ACID(原子性、一致性、隔离性、持久性)要求高的场景。而非关系型数据库在处理大规模数据集、高并发读写和灵活的数据模型方面更具优势,适合大数据和实时Web应用。https://blog.csdn.net/NiNg_1_234/article/details/143751135
3.非关系型数据库特点,非关系型数据库有哪几种易用性和开发工具:非关系型数据库通常提供简单易用的API和丰富的开发工具,使得开发者能够快速地开发、部署和维护数据库应用。 尽管非关系型数据库具有诸多优点,但它们也存在一些局限性。例如,大多数非关系型数据库不支持复杂的SQL查询,不能进行跨表连接等操作。此外,由于数据模型灵活,数据的一致性和完整性不如关系型...https://www.selectdb.com/blog/1167
4.关系型数据库为什么不存储二维表安全性强:数据不能随意修改 选择哪个数据库 数据库可以分为关系型数据库和非关系型数据库。 关系型数据库:是指采用了关系模型来组织数据的数据库,关系模型指的就是二维表格模型(一个表由行和列组成),而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。 https://blog.51cto.com/u_16099168/12477180
5.财务软件数据库类型有哪些财务软件数据库类型有哪些 财务软件数据库类型包括关系型数据库(如or某ale、m某s某ql、sqlserver等)和非关系型数据库(如mongodb、redis、memc某ahed等)。关系型数据库以表格形式组织数据,支持acid事务,易于数据管理和查询。非关系型数据库以键值对或文档形式存储数据,支持分布式部署,具有高性能和可扩展性优势。企业在...https://h.chanjet.com/ask/a51ac3c3ecd34.html
6.SQLiteMySQLPostgreSQL:关系型数据库比较开源地理空间基金会...ySQL从一开始就没有打算做所有事情,因而它在功能方面有一定的局限性,并不能满足一些先进应用程序的要求。 可靠性问题 MySQL对某些功能(例如引用、事务、审计等)的实现方式使得它与其他的关系型数据库相比缺少了一些可靠性。 开发停滞 尽管MySQL依然是一款开源产品,但是自从它被收购之后人们就对其开发进展有很多抱怨。https://www.osgeo.cn/data/7489g
7.图数据库图数据库就是这样一个完全不同于关系型数据库的新型数据库,它处理的是大规模的数据和不断变化的需求。 本书系统地介绍了图数据库的历史由来、建模方法、工作原理和一些真实的用户用例,详细地说明了图数据解决的是什么样的问题,并以Neo4j数据库和Cypher查询语言为例,阐述了图数据库的建模方法和领域用例,最后还介绍...https://www.epubit.com/bookDetails?id=N11801
8.病患需求调查表12篇(全文)9.你最信任的网络系统有哪些?*q请至少列举3个* (1) (2) (3) 病患需求调查表 第3篇 关键词:脑血管病,卫生服务需求,调查分析 脑血管疾病是神经科常见的危机重病, 是严重危害人类健康的三大疾病之一, 由于病程长, 恢复慢, 绝大多数患者出院后需要继续治疗, 给予针对性的康复指导[1], 而三级医院医师往往都...https://www.99xueshu.com/w/file21ueuvtb.html
9.新型信息系统(精选十篇)宏观决策系统数据库可有效利用数据仓库技术,将决策中面向主题的、集成的、与时间有关的和不可修改的数据集合在一起,从地方大量的事务型数据库中通过清理和转换按统一数据格式抽取必要的数据,为决策者提供全方位的支持。宏观决策系统软件用于管理宏观决策系统的数据库和用户接口,保证用户与宏观决策系统的数据库之间方便地...https://www.360wenmi.com/f/cnkey5bl04qo.html
10.大数据环境下审计技术方法研究审计科研专题专栏不同的文献给出了不同的大数据的定义,最常见的定义有世界著名咨询机构麦肯锡公司发布的《大数据:创新、竞争和生产力的下一个前沿领域》,把大数据定义为:大数据指的是大小超出常规数据库工具获取、存储、管理和分析能力的数据集(Manyika,2011)。Gartner把大数据定义为:大数据是具有大容量、快速、和(或)多样性等特点的...http://sjt.fujian.gov.cn/ztzl/sjky/201805/t20180520_3343826.htm
11.浅析技术的重要性论文(精选15篇)在整个机械制造过程中,即使没有很多的人工干预,自动检测技术也可以实现提升生产产品质量的目的,从而使生产产品的不合格率有效降低。传感器、数据信息处理、信号的及时调节和信息结果的输出构成了自动检测系统。这种技术结合了计算机系统的信息处理功能,在很大程度上提升了自动检测的安全性和可靠性。https://www.ruiwen.com/lunwen/1166747.html
12.常用的关系型数据库有哪些?SQL关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。 简单说,关系型数据库是由多张能互相联接的二维行列表格组成的数据库。当前主流的关系型数据库有Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL等。 1、Oracle Oracle是1983年推出的世界上第一个开放式商品化关系型数据库管理系统。它采用...https://www.php.cn/sql/421899.html
13.ICH指导原则E2E药物警戒计划其他毒性相关的资料或数据。 如果产品将用于特殊人群,应当考虑是否需要有特定的非临床数据。 2.1.2 临床 a. 人类安全性数据库的局限性 安全性数据库有其局限性(例如,与研究人群样本大小,研究纳入/排除标准有关) ),应当清楚的讨论这种局限性对于预测上市后产品安全性的影响。应当专门描述在临床医学实践中产品适用的...https://db2.ouryao.com/ich/content.php?lang=cn&id=71