常见数据库

阅读数:67 评论数:0

跳转到新版页面

分类

数据库

正文

传统的关系数据库大家都非常熟悉,这里不再赘述。

一、Columnar Database(列式数据库)

在传统的行式关系数据库中,因为数据是按行进行存储的,所以可以方便地进行数据的插入、删除及修改等更新操作,CPU只要进行一次寻址操作,就可以完成这些操作,所以行式数据库非常适用于需要频繁进行更新的数据库系统。

列式数据库的数据是按列存储的,并且每一列单独存放。只访问查询涉及的列,能大大降低系统IO。每一列可以由一个线程来处理,使查询的并发处理更容易。每列的数据类型一致,数据特征相似,可以方便地进行压缩。

1、优势

(1)当我们执行一个SQL语句时,它可以外将SQL语句分解为若干个可独立执行的、基于列的原子操作,列式数据库只需将涉及的到的列读入内存或高速缓存即可,大大节省了I/O带宽。

(2)由于数据都以列的形式存储,所以在SQL语句执行过程中,节省了行数据库中映射(Projection)运算的开销。

(3)同一个存储单元中的数据具有相同的数据类型,因此这些数据具有相同的特征,可以进行高效的压缩。

(4)由于在列式数据库中可以进行轻量的压缩,即可以在不解压的情况下直接对压缩态的数据进行操作,因此它的查询效率高于行式数据库。

2、缺点

(1)增加了磁盘寻址的时间。当并行读取多列时,需要从磁盘读取多个数据块的数据,这种代价可以通过增加预取数据的磁盘空间得到降低。

(2)增加了插入数据所用的开销。在列式数据库进行插入操作,需要寻找每个属性列的位置,其执行效率非常低,这种开销可以通过批量进行插入数据来予以降低。

(3)增加了元组重构的代价。为了对外提供一个标准的关系数据库接口,如JDBC,必须的查询计划中将不同属性列重组成元组,虽然该操作可以在内存中进行,但是执行该操作所花费的CPU代价非常高。在通常情况下,可以采用延迟物化技术降低该操作的代价。

3、关键技术

(1)数据压缩技术

消零或空格符法(Null Supression)、字典编码算法(Dictionary Encoding)、行程编码算法(Run-length Encoding)、位向量算法(Bit-Vector Encoding)、Lempel-Ziv算法(Lempel-Ziv Encoding)

(2)延迟物化

它在执行计划中用位图来标识行的位置,直到使用属性时再取实际相应列的值,避免了数据不停传递的开销。对列数据库,查询时只要读取那些与之相关的列,按照它们的成分属性构造数据组,只对要取的行执行正常的行数据库的相应操作。

(3)成组迭代

对一个具体的查询,在列数据库里,只要去读同一列值的块。如果列被设定为固定的宽度,则这些值可以直接被推荐为一个数组。

(4)查询优化技术

基于行存储的关系型数据库在查询数据时,不能只读取部分列,所有列都必须读取到内存中然后再去年不需要的列。而基于列存储的数据库可以按需读取列。

(5)稀疏索引技术

基于列式存储的数据库所建立的索引是稀疏的,列值已被排序存储,索引只建立到数据块级,当数据查询通过索引定位到数据块后,就可以使用二分法进行查询。

二、Key-value Database(键值数据库)

主要以键值对为基本的数据结构来表示和存储数据。

虽然键值数据库的种类很多,但底层的存储结构大致类似,主要分为两种:B+tree结构和日志结构合并树(Log-structured Merge-tree,LSM-tree)。B+tree具有很好的读性能,包括单点查询和范围查询,但是随着数据的不断写入和删除等操作,树结点在外存中呈现随机分布,导致了大量的随机写,然而,机械硬盘和固态硬盘等外存设备的随机写性能都不太好,所以B+tree并不适合写密集的场景。而LSM-tree具有优秀的写入性能。

1、LSM-tree

它是一种采用层次结构进行组织数据的索引结构。其核心思想是通过异步更新以及周期性的合并操作,将随机写转化为顺序写。

LSM-tree的数据结构主要分为两个部分:内存结构和外存结构。

内存结构主要包括MemTable、Immutable MemTable、Table Cache、Block Cache。

(1)MemTable

该结构一般采用有序的索引结构,例如:跳表(Skip-lists)或者树形结构(B+tree)。写入的数据首先会被存储到该结构中,当Memtable的大小超过设定的阈值时,MemTable会改名为Immutable MemTable并停止接受新来的数据。此时,LSM-Tree会生成一个新的MemTable用于存储之后的数据。

(2)Table Cache

该结构的主要用于缓存SSTable文件中的索引块和元数据,包括布隆过滤器(Bloom Filter)。在进行查询 操作时,我们需要通过Table Cache来获取目标SSTable文件的索引块。

(3)Block Cache

该结构用于缓存SSTable文件中的数据块。由于用户的访问具有一定的局部性,因此,缓存频繁访问的数据可以有效减少I/O开销,提升系统性能。然而Block Cache会受合并操作影响,存在缓存块失效等问题。

外存结构主要包括SSTable文件、Manifest文件、WAL文件(Write-Ahead Logging)

(1)SSTable

该结构是由数据块、索引块和Footer块组成。在SSTable中,数据块内的数据是有序的,并且数据块和数据块之间也是有序的。索引块存储的是每个数据块中的最大值,用于定位数据块,Footer块存储布隆过滤器、校验信息、索引块的相关今天处,包括位置和大小。

(2)WAL

该结构用于保证内存数据的持久性。数据写入MemTable之前,会先写入到WAL中保证持久性。因此,掉电时WAL可以用来恢复驻留在MemTable和Immutable Memtable中的数据。当Imuutable Memtable成功写入磁盘后,对应的WAL也会被删除。

2、写入流程

我们首先将数据写入Memtable中并同步到WAL保护持久化。当Memtable的容量到达阈值时,会转变为Immutable Memtable并且触发Flush操作。Flush操作会将数据写入到磁盘中,形成SSTable文件,与此同时删除对应的WAL文件。SSTable文件首先会进入L0层,当L0层的容量超过设定的阈值时,数据会通过合并操作向下移动,进入到L1层,并以此类推。

3、读取流程

我们首先查询内存结构,即Memtable和Immutable Memtable,如果存在目标key就立即返回。接着,我们查询外存结构。我们依次遍历L0层到LN层,直到找到目标的key或者返回未找到。在L0中,由于SSTable的范围相互重叠,因此我们需要依次查找最新的文件到最旧的文件。对于其他层,SSTable文件的范围互不重叠,因此我们只需要查询一个文件。当确定目标SSTable文件时,我们首先通过Table Cache获取该文件的索引块和布隆过滤器。接着,我们通过布隆过滤器判断目标数据是否存在。如果存在,我们将通过索引块定位到SSTable中的数据块并通过Block Cache进行获取,最后,通过二分查找从数据块中读取目标数据。

三、NewSQL Database

对于所有使用SQL的人员来说,并不想放弃SQL转而学习其他没有形成体系的语言,在这种情况下,出现 了基于SQL-over-NoSQL的NewSQL。其底层采用NoSQL的架构设计,提供集群的可扩展性的数据存储保障,上层支持SQL查询及SQL处理。这里不得不提的就是国产的TiDB。

NewSQL的设计的目标是成为一个Hybrid Transaction and Analytical Process(HTAP)的数据库,能够同时处理事务和分析的处理请求。

1、SQL的处理过程

在传统的关系数据库中,一条SQL语句的执行可以大致分为以下5个阶段:

(1)SQL输入

(2)语法分析,得到语法树

(3)语义检查

(4)查询优化。这部分主要包含两项工作,一是逻辑优化,二是物理优化。其中逻辑优化主要是根据关系代数,将语法受到惩罚哟在关系代数语法树。物理优化主要是对连接顺序进行调整。

(5)查询执行

四、Graph Database(图形数据库)

图形数据库就是将数据存储在图结构中。图形数据库可以看作是结点与关系的集合,数据存储的重析目的是为了检索,图的查找与搜索可以通过遍历算法完成。

它主要包括三种基本元素:节点(Node)、关系(Relationship)、属性(Property)。

五、Document Database(文档数据库)

概括的说,文档数据库是一个存储和管理大量结构化文档的数据库系统,它仅提供对文档的表达、组织、存储和访问功能,还可以提供诸如文本挖掘、自动文摘等文档的深度处理功能。

文档数据库管理的对象是文档,按照文档的颗粒度大小,可以外将文档分为三层视图:线性文本、结构文本和文本对象。

根据文档的三层视图,文档数据库系统结构也可划分为三个层次:

(1)线性文本层

将文档解释为无结构的字符流,对文档建立全文索引,用户可以通过全文索引对文档库进行全文检索。

(2)结构文本层

将文档解释为按照某种结构组织的文本集,对文档建立结构索引,向下可以利用全全文索引的功能,向上为提供结构化检索功能。

(3)文本对象层

将文档解释为一个独立性、封装性的文本对象,具有可访问的属性集合。

六、Time-series Database(时序数据库)

目标是应对时序数据的存储和查询,所谓时序数据即以时间顺序作为组织形式的数据。时序数据结构并不复杂,其典型特点是产生的频率快、严重依赖于采集时间。

1、分布式存储

分布式数据库有两种分片策略(sharding):范围分片(range sharding)和哈希分片(hash sharding)。

对于时序数据库来说,基于时间的范围分片是合理的。但如果仅仅使用时间分片,会有写入存在热点的问题。所以可以使用哈希进行再次分区。

2、LSM-Tree

3、数据压缩

(1)时间戳压缩:delta-of-delta算法。

(2)浮点数的压缩:如Facebook的Gotilla paper中的思想编码。

(3)整数压缩:ZigZag编码、simple8b编码

(4)布尔压缩: 使用简单的位打包策略进行编码。

(5)字符串压缩:Snappy压缩

七、Spatial Database(空间数据库)

空间数据库的五大核心技术分别为:(1)空间概念模型(2)空间数据类型与操作(3)空间查询语言(4)空间操作算法(5)空间索引访问方法

空间数据库是地理信息系统的核心。

八、Object-oriented Database(面向对象数据库)

面向对象=对象+分类+继承+消息。其中对象指一组属性及这组属性上传用操作的封装体。类是一组具有相属性和操作的对象描述。继承是类之间一种基本关系,指某个类的层次关联中不同类共享属性和操作的机制。消息是对象间通信的手段。




相关推荐

0、时序数据库的特点 (1)按时间顺序写入,没有更新与删除操作。 (2)写多读少 1、时间序列模型 每个数据结构如下: <

一、概述 事物处理技术主要包括数据库恢复技术和并发控制技术。 所谓事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做。事务通常以begin transaction开始,以commit或ro

在用户看来,关系模型的数据的逻辑结构是一张二维表。关系模式中常用的关系操作包括:选择(Select)、投影(Project)、连接(Join)、除(Divide)、并(Union)、交(Inte

数据库:长期存储在计算机内的、有组织的、可共享的数据集合。 数据库管理系统的功能: (1)提供数据定义语言(Data Definition Language,DDL)

一、B-tree 我们常见的数据库系统,其索引使用的数据结构多是B-Tree或者B+Tree。例如,MsSql使用的是B+Tree,Oracle及Sysbase使用的是B-Tree。所以在最开始,简单

CAP理论 (1)Consistency一致性,任何

经纬度保留到小数点后7位,精度就是1cm,所以mysql数据库保存经纬度常用decimal(10,7)。因为decimal在mysql中以字符串存储,所以相对于float来说更精确,相对于字符串

通常分为六个阶段: 一、需求分析 需求分析不仅要明确用户的各种需求,还要充分考虑今后可能的扩充与改变。常用结构化分析方法(SA, Structured Analysis),即自上而下,逐层分解的方式分

1、创建备份目录 cd /home mkdir backup cd backup 2

在关系数据库中,数据库完整性主要包括: 1、实体完整性 (1)主码值必须唯一。 (2)主码的各个属性必须都不为空。 2、参照完整性