数据架构技术
数据架构的核心技术与数据库和存储技术相关,近年来随着技术的发展,越来越多的数据存储技术可以支持多种数据类型。即使使用同一类型的数据存储技术,不同技术的功能及适用的场景也不尽相同。大部分数据存储的引擎都内置存储、查询、处理数据的基础功能,也有部分数据存储的处理和存储功能分离,提供的对外API能力也不相同。下面我们分别来看看数据库技术和存储技术。
数据库的发展历史
数据库已经发展了几十年,下面简要回顾一下数据库的发展历史。
1980—1990年,数据库属于商业起步阶段,此时Oracle、IBM DB2、Sybase,以及SQL Server和Informix等OLTP(Online Transaction Processing)数据库开始出现。
1990—2000年,开源数据库兴起,出现了MySQL、PostgreSQL等;同时出现了一些OLAP(Online Analytical Processing)数据库,来应对大量的数据分析诉求,如Teradata、Sybase IQ、Greenplum等。
2000—2010年,以Google为代表的互联网公司逐渐推出了NoSQL数据库,比如GFS(Google File System)、Google Bigtable、Google MapReduce“三大件”。GFS解决了分布式文件系统问题,Google Bigtable解决了分布式KV(Key-Value)存储的问题,Google MapReduce解决了在分布式文件系统和分布式KV存储进行分布式计算和分析的问题;三大件的核心是通过分布式技术对数据的强一致性需求进行弱化,通过集群的水平扩展来处理,进而衍生了NoSQL数据库来应对非结构化和半结构化的海量数据处理,比如现在的一些典型NoSQL代表如文档数据MongoDB、缓存Redis等。
在2010年以后,出现了AWS Aurora、Redshift、Azure SQL Database、Google Spanner、阿里云的PolarDB和AnalyticDB,它们的特点是具有云服务、云原生、一体化分布式、多模和HTAP能力。
总体来说,数据库的演进经历了从结构化数据在线处理到海量数据分析,从关系型数据库到数据仓库,再到如今异构、多源云原生的发展历程,在此过程中,License传统方式逐步淡出舞台,数据库开源及云上数据库逐步成为主流方式。
数据库的分类
数据库主要分为四类,即OLTP数据库、NoSQL数据库、OLAP数据库及数据库服务和管理类工具,这也是云数据库厂商发力的四个方向。
- OLTP数据库:传统的关系型数据库,用于事务处理的结构化数据库,典型例子是银行的转账记账、订单下单、商品库存管理等。其面临的核心挑战是高并发、高可用及高性能下的数据正确性和一致性。典型的云数据库代表是AWS RDS、Azure SQL Database、阿里云的RDS和PolarDB。
- NoSQL数据库:存储和处理非结构化或半结构化数据(如文档、图、时序、时空、KV),不强调数据的一致性,以此换来系统水平拓展、吞吐能力的提升。典型的云数据库代表是AWS DynamoDB、AWS ElasticCache、Azure Cosmos DB,以及阿里云的MongoDB、Redis等。
- OLAP数据库:应用场景是海量的在线实时分析数据、数据类型复杂及分析条件复杂的情况,能够支持深度智能化分析。其面临的挑战主要是高性能、分析深度、与TP数据库的联动及与NoSQL数据库的联动。典型的云数据库代表是AWS的Redshift、阿里云的AnalyticDB等。
- 数据库服务和管理类工具:比如数据传输、数据备份、数据管理、管控平台等,以简单的形式提供给DBA及数据库开发者。典型的云数据库代表有AWS和Azure的Database Migration Service,阿里云的数据传输服务(Data Transmission Service,DTS)。
接下来,我们分析一下典型的数据库类型。
关系型数据库
关系型数据库即传统的OLTP
,全称是Relational Database Management System(RDMS)
。大部分RDMS
都提供结构化查询语言(SQL
)用于检索和管理数据。一个或者一系列数据库的操作可以构成一个事务(Transaction
)。RDMS
的数据结构(Schema
)通常需要提前定义,所有的读写操作都要遵循Schema
。
关系型数据库可以被分成三个基本的模块,包括:
- 关系模型,即表格、索引、外键、范式等;
- 事务处理(ACID),即原子性(
Atomicity
)、一致性(Consistency
)、隔离性(Isolation
)、持久性(Durability
); - 查询优化,即SQL的解析、改写、优化、执行等。
关系型数据库的典型代表是MySQL、PostgreSQL,以及阿里云的RDS、PorlarDB等。
关系型数据库适用于频繁创建和更新记录,对数据结构需要强制约束,需要高度规范化的数据,不过单个数据条目数据量不大;数据具有高度完整性,追求最终一致性;索引和关系可以被准确地维护。
关系型数据库适用于库存管理、交易管理、报表管理、财务管理等。
Key-Value数据库
Key-Value(KV)数据库是NoSQL的一种,键作为唯一标识符,键和值可以是任何内容,我们可以将任意数据存储为一组键值,并通过键来检索存储值。在大多数情况下,键值存储仅支持简单的查询、插入和删除操作,读取或写入单个值都是原子性操作。键值存储模型对简单查找操作进行了深度优化,查询非常快速。因为键值存储可以在多个节点之间轻松分配数据,所以具有非常强的可伸缩性。如果需要修改某个值,无论是修改部分还是修改全部,应用程序都必须覆盖重写这个值的所有数据,因此键值存储更新效率较低。
常见的KV数据库有以下几种。
Redis
:最流行的键值对存储数据库,是一个使用ANSIC编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库。Cassandra
:开源分布式NoSQL数据库系统,集Google BigTable的数据模型与Amazon Dynamo的完全分布式架构于一身,是一种流行的分布式结构化数据存储方案。LevelDB
:由Google所研发的KV嵌入式数据库管理系统编程库,以开源的BSD许可证发布。
KV数据库非常适合不涉及过多数据关系和业务关系的数据,同时能有效地减少读写磁盘的次数,比关系型数据库存储拥有更高的读写性能,不过数据的特点是非结构化和不可预知的。
以Redis为例,KV数据库的优点主要体现在:
- 性能极高(Redis支持每秒10万次以上的事务数);
- 丰富的数据类型(Redis支持String、Hash、List、Set、Sorted Set、Bitmap和Hyperloglog);
- 丰富的特性(Redis支持Publish/Subscribe、通知、Key过期等)。
KV数据库Redis的缺点也比较明显,主要是不支持强一致性,Redis不能完全保证原子性,发生故障时不可以进行回滚,
所以在使用Redis时,需要根据业务场景进行设计,因为并不是所有场景都需要强ACID原则,比如视频直播、电商秒杀等场景。
文档数据库
文档数据库通常使用类似JSON或XML的格式存储文档,每个文档都包括命名字段和数据。数据既可以是简单的值,也可以是列表、子集合这样的复杂元素,通过唯一的键来进行查询。通常,文档中包含单个实体的数据,如一名用户或者一个订单的数据。一个文档中含有的数据,在RDMS中可能分布在不同的表中,可以解决关系型数据库数据结构扩展不方便的问题。
典型的文档数据库是MongoDB,这是一种面向文档的数据库管理系统,由C++ 撰写而成,以此来解决应用程序开发社区中的大量现实问题。2007年,MongoDB由10gen团队所发展,并于2009年正式对外推出。
文档数据库的优点是可以频繁进行插入和更新操作,数据不需要规范化,新增字段简单,可以兼容历史数据,容易存储复杂数据;文档数据库的缺点和KV数据库类似,对事务的支持较弱,也不支持复杂查询(如Join查询)。文档数据库适用于对读写分离的应用、社交网络、游戏等高频访问业务,以及对数据结构要求不高的业务。
图形数据库
图形数据库是一种NoSQL
数据库,基于图论来存储实体之间的关系信息。图形数据库由两种元素组成:节点和关系。每个节点可以代表一个实体(如人、地点、事物),关系则用于描述节点之间是如何关联起来的。图形数据库可以非常高效地查询社交网络等一系列互相具备关系的节点数据,并分析节点之间的关系。
常见图形数据库如下所示。
Neo4j
:是由Neo4j
公司开发的,具有原生图存储和处理数据的符合ACID
的事务数据库。根据DB-Engines
排名,Neo4j
是最流行的图形数据库。ArangoDB
:是由triAGENS GmbH
开发的原生多模型数据库系统。该数据库系统支持三个重要的数据模型(键/值、文档、图形),其中包含一个数据库核心和统一查询语言。Titan
:是一个可扩展的图形数据库,用于存储和查询包含分布在多机群集中的数百亿个顶点和边缘的图形,并且支持事务。
图形数据库适用于具有多种复杂关系且动态随时间变化的数据类型,具有基于图论的设计灵活性、开发敏捷性,并且支持事务。图形数据库的缺点是节点等有数据的限制,并且对拆分不太支持。其适应的场景包括社交网络、推荐引擎、知识图谱和IT运营等。
列式数据库
在列式数据库中,数据是按列而非行存储的。列式是经常需要一起访问的相关数据分组,而行把许多列数据与本行的行键(Row Key
)关联起来。同一个列式的数据会存储在一起,同一个属性的所有值会被存储在一起。当查询时可以仅对需要查询的列进行处理,这样可以大幅降低I/O,提升性能,支持大量并发用户查询,其适用于海量数据查询场景。另外,列式中任意给定对象的行都可以动态变化。
常见的列式数据库如下所示。
HBase
:Apache
的Hadoop
生态中的一员,运行于HDFS
文件系统之上,为Hadoop
提供类似于BigTable
规模的服务。同时,MapReduce
这个计算框架在HBase
之上提供了高性能的计算能力,以处理海量数据。HBase的基本概念包括Rowkey
(行键)、Column Family
(列族)、Column
(列)、Version Number
(版本号)、Cell
(单元格)。BigTable
:是一种压缩的、高性能的、高可扩展性的,基于Google文件系统(GFS)的数据存储系统,用于存储大规模结构化数据,适用于云端计算。
列式数据库主要适用于批量数据处理和即时查询,有高效的存储空间利用率,普通的行式数据库一般压缩率在3∶1至5∶1,而列式数据库的压缩率一般在8∶1至30∶1,同时查询效率高。列式数据库的缺点是不适合扫描小量数据,不适合随机更新,不适合执行含有删除和更新的实时操作,不支持事务的正常回滚。
列式数据库的适用场景为大数据量且有快速随机访问的需求,写密集型且对性能和可靠性要求非常高的应用,不需要复杂查询条件来查询数据的应用,比如大数据场景、广告营销场景等。
分析型数据库
分析型数据库是面向在线统计分析、即席查询等发掘信息数据价值的数据库。数据分布在多个服务器上,最大限度地提升可伸缩性和可扩展性。分析型数据库可以轻松处理CSV、parquet、ORC等格式的文件。分析型数据库的优势在于超强的实时数据分析能力、高可用和可扩展性、广泛的生态。
OLAP数据库的典型代表是阿里云的AnalyticDB
,可以支持海量数据实时高并发在线分析,具备行列混存引擎,能够支持高吞吐写入和高并发查询,并且支持海量数据处理,支持多表、中文及复杂分析;利用向量化技术,支持结构化数据和非结构化数据的融合处理。
分析型数据库适用于企业BI任务,以及高并发实时数据分析任务。分析型数据库适用的场景包括数据仓库服务、大数据分析及ETL离线数据处理、数据湖分析、在线高性能查询、多模数据分析及异构数据源联合分析等。
搜索引擎数据库
搜索引擎数据库可以让应用程序搜索到保存在外部数据存储中的数据,支持为体量巨大的数据创建索引,并提供对这些索引的实时访问。这些索引是基于多个维度的,用于支持对超大文本数据的自由搜索。
搜索引擎数据库的典型代表如下所示。
Elasticsearch
:是一个基于Lucene
的搜索引擎。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful Web
接口,能够实现实时搜索,稳定、可靠、快速、安装方便。Solr
:是Apache Lucene
项目的开源企业搜索平台。其主要功能包括全文检索、命中标示、分面搜索、动态聚类、数据库集成及富文本处理。
搜索引擎数据库适用于基于多个数据源和服务构建的数据索引,并且查询效率高,可扩展。
搜索引擎数据库的缺点是对事务型支持不足,不支持事务的正常回滚,更新性能较低,内存占用大。搜索引擎数据库适用的场景包括分布式的搜索引擎、数据分析引擎、全文检索、结构化检索、复杂的即席查询、对海量数据进行近实时的处理。
服务和管理类工具
这里主要介绍一些通用的服务和管理类工具。
- 常用的数据分类方法有决策树法、
KNN
法、SVM
法、Bayes
法和神经网络。 - 通用的数据建模工具有
E-R
图、CASE
工具、UML
、Oracle Designer
等。
对于数据传输的迁移,可以采用阿里云的DTS
,它支持多种数据源间的数据传输,支持集数据迁移、数据订阅及数据实时同步,并支持公共云、混合云场景,可以解决远距离、毫秒级异步数据传输难题。
另外,在云数据库类型中,各大云服务厂商也提供了其他工具能力,如数据库备份、数据库管控平台、数据库SQL
监控和分析等。
存储技术
除数据库之外,数据架构还要考虑数据的存储问题,这里主要介绍以下几个方面。
- 对象存储:主要用于存储离散单元(对象)。每个对象都在一个被称作存储桶的扁平地址空间的同一级别里,一个对象不会从属于另一个对象。对象存储适合存储和检索较大的二进制对象,如图像、视频、音频、大型文档,以及CSV、Parquet和ORC等格式的常用于大数据场景的文件。对象存储可以用于管理和存放海量非结构化数据。
- 典型的云存储服务有AWS的S3、Azure的Blob Storage、阿里云的OSS。
- 块存储:可以像使用物理硬盘一样格式化及建立文件系统,具有高性能和低时延的特点,支持随机读写。
- 典型的云存储服务有AWS的EBS、Azure的Managed Disks、阿里云的块存储。
- 共享文件:可共享访问、弹性扩展、具有高可靠性及高性能的分布式文件系统,提供共享访问。
- 典型的云存储服务有AWS的Elastic File System、Azure的Files、阿里云的文件存储。
- 归档和备份:存储和归档不常访问且长期存在的数据,以及备份和恢复云上文件。
- 典型的云存储服务有AWS的S3 Glacier、Azure的Storage Archive Access Tier、阿里云OSS的归档存储。
- 批量离线数据传输:PB级别端到端的离线数据迁移服务,能够使用安全设备将大量数据传入或传出云端。
- 典型的云存储服务有AWS的Snoball Edge、Azure的Data Box、阿里云的闪电立方。