- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
分布式关系型数据库服务DRDS最佳实践-Aliyun.PDF
分布式关系型数据库服务DRDS
最佳实践
分布式关系型数据库服务DRDS/最佳实践
最佳实践
数据拆分策略
数据拆分策略
切分维度的选择是决定我们的分布式数据最重要的一个权衡性因素,需要审慎选择,一般而言,您可以按照以
下五个维度进行思考和权衡,包括数据均衡度考虑、事务边界因素、常用查询效率考虑、异构索引考虑、简单
性策略。 每一个应用业务类型可能都不太一样,也不太可能匹配所有因素的最优策略,具体采用何种方式,还
需要通过综合考量,每个因素都不能太走极端,否则会导致开发运维成本急剧增长。
容量和访问均衡
一般来说数据容量和访问均衡是我们考量的第一点,不均衡的数据分布和访问可能不能充分发挥数据拆分的能
力,让访问体验变差,同时带来成本上的损耗,相当于1+12的效果。所以一般来说拆分字段区分度比较大
,数据分布和访问相对会比较均衡,但是这点也需要考虑到某一个拆分值是否有热点的问题。
那么按照这个原则,能否按主键拆分(区分度最大)呢?我们没有禁止按主键拆分,但是不推荐,因为按主键拆分
,如果要保持最佳性能,你每个sql都需要带上这个主键字段(当然不带扫描所有数据分片也可以,只是性能会降
低)。
事务边界
事务边界越大(或者单个sql所执行的数据分片数),那么系统的锁冲突概率越高,系统越难以扩展,性能越低。
因此,若想将您的系统做到很好的扩展性,那么一个最重要的原则就是想办法划小事务边界,并尽可能让事务
的边界限制在单台机器内。缩小事务边界的方式,主要有以下三类:
第一种方式:事务边界本来就很小
比如,您发现按照某个切分条件,数据分布均匀,并且事务边界只在单机内,不需要跨机事务,那么恭喜,这
个切分条件是非常合适的切分维度。
第二种方式:使用基于消息的最终一致模型,将强一致事务变为最终一致事务
针对事务的拆解,是个比较复杂的概念,我们会专门进行阐述,在这里只针对一个最常见的最终一致性事务拆
解模型做出简单说明。例如,当我们要通过分布式事务完成在两台数据库内的数据转账操作的时候,我们会发
现有些操作不得不通过网络而进行传递,这明显的增加了单次事务的延迟,极大的降低了性能。
第三种方式:谨慎的使用分布式事务
使用最终一致性事务,一般只能解决90%的业务场景,剩下的一些场景,可能还是需要使用分布式事务方式完
成。但分布式事务必然带来非常多的性能问题,因此,我们只建议在不得不使用分布式事务的时候,才使用。
常用查询
对于常用查询优化的核心要义,就是尽可能让您的一次前端请求,物理上直接发送到一台存储的机器上,尽可
1
分布式关系型数据库服务DRDS/最佳实践
能避免那些需要将请求下发到多台机器的查询。下发到多台机器的查询,虽然每次查询的延迟不会出现问题
,但这类查询会导致一次请求物理上必须被发送到很大一批存储的机器上,会额外占用过多下层数据节点的各
类的资源,因此应该尽可能的与以避免。
异构索引
在上面的例子中出现的都是只按照一个维度进行查询时的处理方式,那么如果这个系统会有多个主要的查询维
度时,我们又能有什么处理方式呢?
第一种方式
就是接受全表扫描,虽然这会带来更多地读取量,但我们可以通过水平加备库的方式,近乎无限的扩展我们的
读取能力。因此是一个可行的方案,只是成本略高。
第二种方式
如果想进一步降低成本,我们可以考虑使用异构索引表,其本质就是利用异步触发器,将原表内的每一次更新
,都换一个写入的维度,写入到新的表中。如果您对数据库比较熟悉,那么简单映射一下,异构索引表的作用
就基本等同于传统数据库中的索引概念,其不同之处,主要是索引构建过程从同步改成了异步,索引表和主表
之间可能存在100ms左右的延迟
保持简单
处理各方面冲突,在真实的世界中,切分键的选择往往都是充满着各种诱惑,选择A方案,有这些好处。而选择
B方案,也会有那些好处。
如果查询优化与均衡读写访问两个选项发生了冲突,那么请选择均衡读写访问作
文档评论(0)