数据库大数据量存储结构研究

2021-09-13 18:53刘丹任浩然
无线互联科技 2021年10期

刘丹 任浩然

摘 要:随着大数据云计算技术逐步成为数字经济的基础设施,规模化、业务化、智能化的海量数据的存储在面对快速变化的业务需求和多元化的查询需求时,越來越不能灵活地根据业务需求进行快速的迭代更新,对多元化查询需求的快速响应和容错变得越来越困难。传统的关系型数据库支持ACID,对成熟的业务系统有着良好的支持,一旦核心的业务出错可以立即回滚;互联网的业务追求拥抱变化,追求快速响应和迭代以及结果的最终一致和容错性。在此背景下,文章提出一种新的多元且灵活的数据库大数据量的存储结构,其支持国内外绝大多数主流的数据计算引擎,在索引和多元化查询方面的表现也更加优异,可以更好地容错和快速迭代更新。

关键词:关系型数据库;多元查询;存储结构

0    引言

关系型数据库凭借其优秀的行列二维表的关系数据模型,在互联网和工业领域被广泛地使用,主流的关系型数据库是Oracle,MySQL等,它们在业务成熟且流程固定的场景下,存储和应用非常标准和规范化。

通用的SQL语言可以支持很多复杂场景下的业务需求,关系代数为了维护ACID的强一致性,其必须预先定义固定二维表,缺乏灵活性和容错性,近年来NoSQL类的数据库应运而生,在高并发读写和降低硬盘I/O方面有了很大的速度优势,容易扩展。本文在对比研究了关系型和NoSQL数据库的数据存储结构后,提出一种新的多元且灵活的大数据量的存储结构,其支持大数据生态的各种主流的开源数据计算引擎,能够快速迭代,在索引和多元化查询方面也有着不错的表现。

1    关系型数据库数据存储结构

1.1  B-Tree

B-Tree是一种多路搜索树的数据结构,它由树的简单结构演变而来,将左右子树分为多叉的树形结构,数据在每个节点都存在但不存储数据的副本,搜索性能和二叉查找树的级别相当,但整个树的高度比二叉的平衡查找树低,从而避免了磁盘的多次读取,适用于存储和搜索数据。关系型数据库通常使用B-Tree的结构作为非聚簇索引的底层数据结构,先查到聚簇索引的主键值,然后通过聚簇索引的主键值查找到真正行的详细数据。

1.2  B+Tree

B+Tree[1]也是一种多路搜索树,它是由B-Tree的数据结构演变而来,把所有的数据放到了叶子节点,叶子节点之间加入了一个个指针指向下一个叶子的地址,在做范围数据查找时具有优势。关系型数据库通常使用B+Tree的结构作为聚簇索引的底层数据结构,尽量将主键存储在B+Tree的非叶子节点中,如果其中的某个查询在业务场景中使用得很频繁,可以考虑遵循最左的子树的索引覆盖的原则将多个字段作为联合索引优化查询的性能。

2    NoSQL数据库数据存储结构

2.1  KeyValue存储

数据的存取都直接通过定义好的Key。在不需要实物支持和固定模式的情况下,注重对大数据读写性能的提升,目前主要的KV数据库有Memcached,Redis等。Memcached支持多种语言并保证分布的均匀性,Redis是将所有的KV都存于内存,速度很快,值的类型也比其他数据库的类型丰富。此类KV数据库适用于消息队列、实时系统和高频读低频写的场景。

2.2  列存储

查询密集型的OLAP[2]场景下,对表的数据一般是取某几列的数据,对数据表的读取按行读非常消耗性能,因为并不需要行中的所有数据,一般是按列去存储数据。列存储可以对相同数据类型的数据进行压缩但在增加、删除、修改数据频繁的OLTP场景下不太适用。传统RDBMS应对复杂关系运算、关系挖掘能力有限,列存储让服务器具备横向扩展的能力,在批处理下可以显著地减少CPU的使用率。

2.3  JSON存储

JSON直观简单不依赖于位置,目前主流的JSON类数据库是MongoDB和SequoiaDB。前者面向集合的设计理念能够做到灵活的模式;后者使用交互式的JSON格式定义。JSON类型的存储带来的灵活性得益于其直观简单的数据格式。

3    多元灵活的存储结构

结构化的数据最为常见,格式固定,支持高吞吐写入以及大规模存储,想要多元灵活的大数据结构化的存储,采用集中式的存储模式,作为业务数据库的大宽表,离线批量计算的流入和流出需要支持到PB级别。固定的组合查询许多的维度表会经常发生变化,大宽表机制不能完全解决问题,因此使用MPP的方式对单个查询进行同步,限制数据量,以避免非常昂贵的、没有意义的计算。查询进入MPP时,采用MurmurHash算法,算出一个值作为指纹值。Meta信息中,存储该指纹值和行数。通过定期执行任务,去同步该查询数据,同入MPP一样,遍历每行每列,算出新的指纹值。如果指纹值不变,则结束;反之,将该查询重新入库,记住新的指纹值,在新数据入MPP库的时候不重复计算,以得到最好的性能,从而支持多元灵活的大数据结构化的存储。无法结构化的数据,例如图片、文件、视频一般使用HDFS[2]存储,沿用成熟的HDFS方式采用面向资源的分布式系统架构设计,所有组件都可扩展,避免因单点失效的故障问题。将非结构化数据以文件的方式存储在文件系统中,同时将指向文件路径存储在数据库表中,这种方式数据读写的速度较快。

4    结语

本文研究了多种业内主流的传统关系型数据库和NoSQL的存储结构,在面对快速变化的业务需求和多元化的查询需求时,提出一种多元且灵活的数据库大数据量的存储结构,在索引和多元化查询方面的表现更加优异,可以更好地容错和快速迭代更新。但还存在一些不足,该存储结构数据派生能力弱不能做到数据写入主存储后会由主存储再向辅存储进行同步、运维复杂核心依赖是Zookeeper和HDFS,需要经验丰富的专业团队运维管理和热点处理能力差无法保证数据访问的热度均匀,这些是以后工作的方向和重点。

[参考文献]

[1]WANG C,BRIHADISWARAN G,JIANG X,et al.Circ-Tree: A B+-Tree variant with circular design for persistent memory[J].IEEE Transactions on Computers,2021(99):1.

[2]SOUNTHARRAJAN S,RAJAN C,SANKARANANTH S,et al.HDFS-based parallel and scalable pattern mining using clouds for incremental data[J].International Journal of Computer Aided Engineering and Technology,2020(1/2):28.

(编辑 王雪芬)