当前位置: 首页 > 科技观察

说说“数据拆分层次对比”

时间:2023-03-22 13:00:28 科技观察

当企业数据达到一定规模时,就不得不面临数据拆分的问题。使用分布式数据库是一个相对“简单”的选择。分布式架构可以支持海量规模,避免分裂带来的各种“麻烦”。当然,分布式数据库也不是“灵丹妙药”,也有适用场景。如果在分布式数据库下解决不了,还是需要面对拆分的问题。但是如何拆分数据就很头疼了。除了结合业务拆分,具体拆分的粒度也需要注意。拆分可以在实例级别、库级别、表级别和分区级别进行。不同级别的拆分有其自身的优点和缺点。下面针对不同的拆分方式进行简单的对比分析。1、拆分级别:实例级别拆分,即在实例级别拆分,即将原始数据拆分到多个数据库实例中承载更大的规模。架构从架构的角度来看,实例层面的拆分无疑更加彻底。通过增加更多的实例,可以有效地增加计算和存储资源。很多分布式数据库的架构也是采用上层分布式计算层和下层单机存储引擎相结合的方式。原理是在架构层拆分更多的实例来支持。每个实例都承载了一部分数据,这会在一定程度上增加数据耦合,要求所有实例都可用,以提供完整的数据服务。研发从研发的角度来看,实例级拆分无疑是一个很大的变化,从单一数据源到多数据源。对于业务发展,我们要解决多数据源管理和少量跨实例的问题。一般可以通过自研或者引入第三方数据库访问层来解决问题,减少对开发的影响。对于数据分析需求,更推荐将数据聚合到AP层进行处理。无论是哪方面的调整,工作量和难度都比以往的结构大得多、复杂得多。运维从运维的角度来看,实例级拆分意味着运维工作的很多变化。从资源管理、实例管理、备份恢复、系统优化等,都要从单实例向多实例转变。分成多个实例后,需要解决一些数据耦合关系带来的问题。比如如何实现跨实例的一致性备份,如何解决监控指标的全局聚合等等。对于数据对象本身的管理,就比较复杂了。前者多使用运维平台解决多实例管理带来的工作量增加问题;后者通过数据库中间层可以有效解决,多个实例在逻辑上被当成一个实例。安全性从安全性的角度来看,实例级拆分肯定是劣势。需要解决多实例或分散情况下的安全和统一管理访问能力。可以通过统一的安全平台或安全框架在一定程度上解决。2.拆分级别:库级拆分是在库级别进行,即将原始数据拆分到多个数据库中。不同数据库的名称不统一。以MySQL为例,就是“showdatabases”看到的结果。通常也称为不同的模式。架构从架构上看,这种拆分方式只是逻辑层面的拆分,并没有真正增加物理资源,因此对计算和存储的扩展影响不大。在数据耦合方面,有所增加。这种拆分方式虽然没有增加资源,但是可以为以后的扩张打下一定的基础。比如后续拆分给不同的实例,可以简单的拆分出某个Schema,相对简化。研发从研发的角度来说,比实例级拆分更轻,需要增加对多schema的支持。需要解决必要的多数据源管理或者一些跨Schema的问题。分析类的需求可以通过跨schema关联来完成。工作量有一定的增加,但难度相对较小。也可以通过自研或者引入第三方数据库访问层来解决。从运维的角度来说,应该是因为没有引入其他实例,日常运维、备份和恢复也没有发生变化。对于对象管理,需要考虑多模式的支持。至于能否通过拆分schema来提升性能,还不确定。使用较小的访问规模可能会提高性能;但是,因此引入更多关联查询可能会导致性能下降。安全性从安全性的角度来看,这种方式在管理上还是会造成一定的复杂度。管理成本的改善与前面的例子没有太大区别。3.拆分级别:表级表级拆分是指将原来的单表拆分成多个子表(表名都变了)。物理上,单个对象被拆分成多个对象,有时一个对象可以通过视图等进行逻辑上的重新装饰。从数据耦合的角度来看,它变得更糟了。R&D从R&D的角度来看,和之前的库级拆分类似,还是有一定的工作量,但是相对难度不大。也可以通过自研或者引入第三方数据库访问层来解决。运维从运维的角度来说,和之前的库级拆分类似,区别不大。安全性从安全性上看,与之前的库级拆分类似,区别不大。4.Splitlevel:Partition级分区是一种数据库级别支持的技术。通过在表中将数据划分为多个分区,达到大数据和小数据的效果。这是数据库的原生内置优化功能。与之前的实例级、库级、对象级相比,更加轻巧,没有更多的感知。架构从架构的角度来看,这种做法并没有扩展现有的资源,与拆分前的架构几乎没有区别。研发从研发的角度来看,变化不大。数据是分区存储的,业务层感觉不到就可以做到。原来的开发逻辑一般都可以正常使用,但是可能有些地方需要调整一下。运维从运维的角度来看,资源和实例的管理没有变化。最大的区别是对象管理。分区级拆分提供了更灵活的管理方式,支持分区合并、拆分、交换、清理等能力,方便对象管理动作。从性能的角度来看,使用分区后,数据库优化器会对分区进行更多的优化动作,相对性能会有所提升。当然,这里需要注意的是,不同的数据库在分区能力上有很大的差异,有些数据库还比较不完善,分区可能会有很多限制。安全性从安全性的角度来看,分区级拆分与拆分前相比并没有太大变化。作者介绍韩峰,社区编辑,CCIA(中国计算机协会)常务理事,前OracleACE,腾讯TVP,阿里云MVP,dbaplus等社区创始人或专家组成员。具有丰富的一线数据库架构、软件开发、产品设计、团队管理经验。曾担任多家公司的首席DBA和数据库架构师。涉足云、电子商务、金融、互联网等行业,精通各种关系型数据库,也涉足NoSQL和大数据相关技术,具有丰富的实战经验。他撰写了与数据库相关的书籍《SQL优化最佳实践》和《数据库高效优化》。