
数据千万级别之多,占用的存储空间也比较大,可想而知它不会存储在一块连续的物理空间上,而是链式存储在多个碎片的物理空间上。可能对于长字符串的比较,就用更多的时间查找与比较,这就导致用更多的时间。
可以做表拆分,减少单表字段数量,优化表结构。
在保证主键有效的情况下,检查主键索引的字段顺序,使得查询语句中条件的字段顺序和主键索引的字段顺序保持一致。
主要两种拆分 垂直拆分,水平拆分。
垂直分表
也就是“大表拆小表”,基于列字段进行的。一般是表中的字段较多,将不常用的, 数据较大,长度较长(比如text类型字段)的拆分到“扩展表“。 一般是针对 那种 几百列的大表,也避免查询时,数据量太大造成的“跨页”问题。
垂直分库针对的是一个系统中的不同业务进行拆分,比如用户User一个库,商品Product一个库,订单Order一个库。 切分后,要放在多个服务器上,而不是一个服务器上。为什么? 我们想象一下,一个购物网站对外提供服务,会有用户,商品,订单等的CRUD。没拆分之前, 全部都是落到单一的库上的,这会让数据库的单库处理能力成为瓶颈。按垂直分库后,如果还是放在一个数据库服务器上, 随着用户量增大,这会让单个数据库的处理能力成为瓶颈,还有单个服务器的磁盘空间,内存,tps等非常吃紧。 所以我们要拆分到多个服务器上,这样上面的问题都解决了,以后也不会面对单机资源问题。
数据库业务层面的拆分,和服务的“治理”,“降级”机制类似,也能对不同业务的数据分别的进行管理,维护,监控,扩展等。 数据库往往最容易成为应用系统的瓶颈,而数据库本身属于“有状态”的,相对于Web和应用服务器来讲,是比较难实现“横向扩展”的。 数据库的连接资源比较宝贵且单机处理能力也有限,在高并发场景下,垂直分库一定程度上能够突破IO、连接数及单机硬件资源的瓶颈。
水平分表
针对数据量巨大的单张表(比如订单表),按照某种规则(RANGE,HASH取模等),切分到多张表里面去。 但是这些表还是在同一个库中,所以库级别的数据库 *** 作还是有IO瓶颈。不建议采用。
水平分库分表
将单张表的数据切分到多个服务器上去,每个服务器具有相应的库与表,只是表中数据集合不同。 水平分库分表能够有效的缓解单机和单库的性能瓶颈和压力,突破IO、连接数、硬件资源等的瓶颈。
水平分库分表切分规则
1. RANGE
从0到10000一个表,10001到20000一个表;
2. HASH取模
一个商场系统,一般都是将用户,订单作为主表,然后将和它们相关的作为附表,这样不会造成跨库事务之类的问题。 取用户id,然后hash取模,分配到不同的数据库上。
3. 地理区域
比如按照华东,华南,华北这样来区分业务,七牛云应该就是如此。
4. 时间
按照时间切分,就是将6个月前,甚至一年前的数据切出去放到另外的一张表,因为随着时间流逝,这些表的数据 被查询的概率变小,所以没必要和“热数据”放在一起,这个也是“冷热数据分离”。
分库分表后面临的问题
事务支持
分库分表后,就成了分布式事务了。如果依赖数据库本身的分布式事务管理功能去执行事务,将付出高昂的性能代价; 如果由应用程序去协助控制,形成程序逻辑上的事务,又会造成编程方面的负担。
跨库join
只要是进行切分,跨节点Join的问题是不可避免的。但是良好的设计和切分却可以减少此类情况的发生。解决这一问题的普遍做法是分两次查询实现。在第一次查询的结果集中找出关联数据的id,根据这些id发起第二次请求得到关联数据。
跨节点的count,order by,group by以及聚合函数问题
这些是一类问题,因为它们都需要基于全部数据集合进行计算。多数的代理都不会自动处理合并工作。解决方案:与解决跨节点join问题的类似,分别在各个节点上得到结果后在应用程序端进行合并。和join不同的是每个结点的查询可以并行执行,因此很多时候它的速度要比单一大表快很多。但如果结果集很大,对应用程序内存的消耗是一个问题。
数据迁移,容量规划,扩容等问题
来自淘宝综合业务平台团队,它利用对2的倍数取余具有向前兼容的特性(如对4取余得1的数对2取余也是1)来分配数据,避免了行级别的数据迁移,但是依然需要进行表级别的迁移,同时对扩容规模和分表数量都有限制。总得来说,这些方案都不是十分的理想,多多少少都存在一些缺点,这也从一个侧面反映出了Sharding扩容的难度。
ID问题
一旦数据库被切分到多个物理结点上,我们将不能再依赖数据库自身的主键生成机制。一方面,某个分区数据库自生成的ID无法保证在全局上是唯一的;另一方面,应用程序在插入数据之前需要先获得ID,以便进行SQL路由.
一些常见的主键生成策略
UUID
使用UUID作主键是最简单的方案,但是缺点也是非常明显的。由于UUID非常的长,除占用大量存储空间外,最主要的问题是在索引上,在建立索引和基于索引进行查询时都存在性能问题。
Twitter的分布式自增ID算法Snowflake
在分布式系统中,需要生成全局UID的场合还是比较多的,twitter的snowflake解决了这种需求,实现也还是很简单的,除去配置信息,核心代码就是毫秒级时间41位 机器ID 10位 毫秒内序列12位。
跨分片的排序分页
一般来讲,分页时需要按照指定字段进行排序。当排序字段就是分片字段的时候,我们通过分片规则可以比较容易定位到指定的分片,而当排序字段非分片字段的时候,情况就会变得比较复杂了。为了最终结果的准确性,我们需要在不同的分片节点中将数据进行排序并返回,并将不同分片返回的结果集进行汇总和再次排序,最后再返回给用户。
安装 requests
pip install requests
安装 pysnowflake
pip install pysnowflake
启动pysnowflake服务
snowflake_start_server \
--address=192.168.137.11 \
--port=30001 \
--dc=1 \
--worker=1 \
--log_file_prefix=/tmp/pysnowflask.log
--address:本机的IP地址默认localhost这里解释一下参数意思(可以通过--help来获取):
--dc:数据中心唯一标识符默认为0
--worker:工作者唯一标识符默认为0
--log_file_prefix:日志文件所在位置
俗话说,天下大势,合久必分、分久必合。
数据库领域同样如此。过去五十余年,数据库经历OLTP和OLAP两种需求漫长的融合-分离-再融合的过程。究其原因,数据库的发展始终与用户场景需求变迁紧密相关。如今,随着云计算和大数据的兴起,业务场景正在经历前所未有的变革,数据库领域也掀起了一股HTAP浪潮。
Gartner在多次报告中强调,HTAP是数据库领域最重要的发展趋势之一,也是用户数字化转型中重要的数据平台。业界甚至认为,HTAP的兴起代表着数据库大融合时代的开启。
那么,为什么数据库大厂和云服务巨头们均纷纷押宝HTAP?开源+多云为何是HTAP普及的助推剂?面对新一代HTAP数据的崛起,多年积累形成的MySQL生态终于找到最佳归宿?
放在几年前,HTAP可能还会被认为是数据库领域的小众产品,是否成气候还有待观察。
而随着数据资源、数据消费习惯和数据驱动型场景发生巨大变化,用户需求与传统数据库之间的供需矛盾日渐突出,使得HTAP这种具备“同时支持OLTP和OLAP、创新计算存储框架、去ETL”等特征的新时代数据库成为不可阻挡的趋势。
如今,几乎所有数据库大厂和云服务巨头都在布局HTAP。例如,OceanBase去年推出的 3.0版本中就正式宣布向HTAP数据库进军;今年5月,Google Cloud发布HTAP云端数据库AlloyDB,为PG用户提供了HTAP数据库服务;再加上Oracle MySQL Heatwave,甚至连SnowFlake也发布Unistore来“蹭”HTAP的热点。
如果细数近一年以来的HTAP新品,会发现几乎全部都建立在云端之上。新一代HTAP+云正在成为数据库市场重要的潮流。例如,PingCAP近日发布的TiDB 6.0,也是与云端紧密联系的新一代HTAP数据库。
事实上,PingCAP是HTAP数据库领域非常重要的一个引领者。早在TiDB 3.0起,PingCAP就正式转向HTAP,从OLTP主引擎+OLAP辅助能力,到OLTP引擎+外接分析引擎,再到OLTP引擎+融合分析引擎,PingCAP在HTAP领域稳打稳扎,一个版本上一个台阶。
如今,随着TiDB 6.0的发布,针对HTAP进行了更多成熟性改进,TPC-C 性能也较 5.0 版本提升达到 76.32%,TiDB 6.0还增强了多个企业级特性,以更好适合云时代用户对于HTAP数据库的需求。
固然,有人质疑当前HTAP是新瓶装旧酒,并无太多新意。但业界普遍形成共识:新一代HTAP与过去完全不同,开源+云孕育而出,很多都有AI加持,而且是为数据敏捷而生,拥有过去前所未有的创新活力与迭代速度,并逐渐形成数据库技术变革的新潮流。
PingCAP CTO 黄东旭也直言:“TiDB近年来的快速进化与迭代,得益于开源和云的助力。”
HTAP之所受到用户青睐,某种程度是因为用户对于数据敏捷性的极度渴求。
“在数字化时代,客户最为在乎的是如何快速走向市场。这需要数据敏捷性,而HTAP恰恰是数据敏捷的核心能力。”黄东旭如是说。
最近几年,“海量、实时、在线”的需求越来越广泛,大量采用 MySQL 和 PostgreSQL 开源数据库的新一代企业需要提升对于热数据的实时在线分析能力,这类需求遍布几乎所有的互联网企业以及从事线上业务的数字化转型企业。对于新鲜数据的实时分析能力直接决定了这些业务的生死存亡,传统的 OLTP+OLAP+ETL 的数据架构已经严重阻碍了消费者体验,这种诉求催生了 HTAP 的技术变革。
而真正帮助HTAP与用户需求完成对接的则是开源+云。众所周知,开源近年来在数据库领域的流行和影响力与日俱增,DB-Engines数据显示,全球383款数据库中开源数据库占据51.7%,六款开源数据库进入到前十,开源正在成为像HTAP这种新时代数据库的创新源泉。
以PingCAP的TiDB为例,其产品研发体系建立在开源体系和开源社区的基础上,实现了一年一个大版本、一个月一个小版本的迭代速度。黄东旭透露道:“开源是TiDB的第一个增长引擎,通过开源体系,开发者、贡献者、布道者和用户能够很好串联起来,形成飞轮效应,让产品能够走向加速迭代和创新的正向循环。”
据悉,TiDB每年会有超过 40% 的代码更新,而这些代码有很大一部分由外部贡献者所共享。TiDB开源项目一直在全球和中国开源项目活跃度中名列前茅。
如果说开源改变了HTAP产品的开发模式和迭代速度,那么云则能够为HTAP产品提供用户最为直接的需求反馈。众所周知,云数据库一改以往传统数据库部署、运维、扩展等难题,以云服务的方式让数据库使用更加简单;更加关键的是,随着云计算的普及,云上用户群体持续增加,来自云上用户群体的需求反馈无时无刻都在发生,对于数据库产品的进化与迭代至关重要。
“真正的产品迭代是如何缩短用户问题/需求的反馈时间。云无疑为数据库等基础软件提供了这样的价值,让产品可以更好地迭代。”黄东旭如是说。以TiDB为例,自去年五月全托管的数据库即服务(DBaaS)产品 TiDB Cloud 公测版发布以来,已经陆续登陆亚马逊云 科技 、谷歌云等全球知名云服务商的Marketplace,并在今年5月份正式全球商用;今年 6 月与阿里云合作上线阿里云云市场,成为为数不多的跨全球三朵云的数据库服务。
在众多数据库产品之中,MySQL凭借着开源、免费、适合互联网场景等优势,常年位居全球最受欢迎数据库的前三。根据Slintel网站的统计数据,在全球关系型数据库市场中,MySQL市场份额最高,达到43.04%。
过去二十年里,开源MySQL数据库对于各行各业影响至深,捕获了来自互联网、金融、零售、交通等多个行业用户的心,堪称“万人迷”。例如,在中国就有超过9成的金融机构都应用了MySQL数据库。
但任何数据库潮流都是“需求变化+技术变革+架构创新”融合的产物,MySQL是如此,HTAP亦不例外。如今,场景的数据规模、业务并发量、处理速度要求跟以往相比早已不是一个数量级。此时,MySQL数据库的局限性愈发突出,扩展性很难满足用户需求,想继续获得增长的企业不得不使用分库分表方案,但这又会造成数据架构的复杂性。
新一代HTAP数据库无需分库分表,且具备实时海量规模的OLTP和实时数据分析能力,还拥有极为出色的扩展性,与很多业务场景的海量交易实时数据展现、平稳运行的需求高度契合,HTAP凭借技术架构优势崛起已成必然。
“用户需求侧最大的变化就是很多用户需要借助热数据实现运营级别的实时分析,获得实时洞察以支持决策,这极大推动了新一代HTAP数据库的需求。”PingCAP副总裁刘松补充道。
虽然MySQL已经增加列存引擎Heatwave来获得HTAP能力,但主要解决规模化查询的问题,系统本身架构并未产生革命性变化,扩展能力、OLTP吞吐量依然有着很大局限。“智能新能源 汽车 跟传统燃油车在外表看几乎没区别。数据库也类似,像TiDB这种新一代HTAP数据库,从架构设计、应对场景和使用体验等角度,都与传统数据库有着极大的区别。”刘松形象比喻道。
事实上,与过去SAP HANA这种小众、昂贵的HTAP不同,新一代HTAP拥有极强的兼容性,像Google Cloud、PingCAP这些数据库厂商都借助新一代HTAP架构为采用 MySQL或者PG开源数据库的企业拓展 OLTP和OLAP的能力范围。
例如,Google Cloud发布的HTAP云端数据库AlloyDB,为单机版PG生态用户提供了最好选择,TiDB则成为MySQL生态的最佳归宿。PingCAP大量用户中有很多TiDB与MySQL混合部署的成功案例;得益于 TiDB 的开放性,TiDB 也可通过和其他数据服务产品“混搭”形成新的数据服务解决方案, 如通过同样是开源的大数据计算引擎 Flink 混搭形成实时数仓解决方案,扩展 HTAP 数据库的能力边界。
黄东旭则直言,HTAP数据库除了产品、技术之外,尤为需要关心用户体验,“HTAP应该让用户觉得好用,屏蔽掉数据库的复杂性。”据悉,PingCAP是2022 Gartner Peer Insights“Voice of the Customer” 云数据库领域唯一入选的中国数据库公司,客户总体评分达到 4.7 分(满分 5 分),在所有入选企业中位列第一。在参与Gartner Peer Insights评分的PingCAP用户中,像互联网、金融等重点行业用户均高度认可HTAP现代数据库理念。
总体来看,今年是HTAP的大年,各大厂商纷纷在市场中上新。随着新一代HTAP数据库产品的增多,整个市场对于HTAP数据库理念和产品的接受与采用将会提速。而随着新一代HTAP数据库持续完善,让广大MySQL生态用户群真正看到了大数据时代一条绝佳的迁移路径。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)