【DB】列式存储 & 行式存储

打印 上一主题 下一主题

主题 878|帖子 878|积分 2634

1、概述

在传统的行式数据库系统中,数据按如下次序存储:
RowWatchIDJavaEnableTitleGoodEventEventTime#0893543506621Investor Relations12016-05-18 05:19:20#1903295099580Contact us12016-05-18 08:10:20#2899537060541Mission12016-05-18 07:38:00#N…………… 处于同一行中的数据总是被物理的存储在一起。
常见的行式数据库系统有:MySQL、Postgres 和 MS SQL Server。
在列式数据库系统中,数据按如下的次序存储:
Row:#0#1#2#NWatchID:893543506629032950995889953706054…JavaEnable:101…Title:InvestorRelationsContact us Mission…GoodEvent:111…EventTime:2016-05-18 05:19:202016-05-18 08:10:202016-05-18 07:38:00… 这些示例只显示了数据的排列次序。来自不同列的值被单独存储,来自同一列的数据被存储在一起。
常见的列式数据库有: Vertica、 Paraccel (Actian Matrix,Amazon Redshift)、 Sybase IQ、 Exasol、 Infobright、 InfiniDB、 MonetDB (VectorWise, Actian Vector)、 LucidDB、 SAP HANA、 Google Dremel、 Google PowerDrill、 Druid、 kdb+。
不同的数据存储方式适用不同的业务场景,数据访问的场景包罗:进行了何种查询、多久查询一次以及各类查询的比例;每种类型的查询(行、列和字节)读取多少数据;读取数据和更新之间的关系;利用的数据集大小以及如何利用本地的数据集;是否利用事件,以及它们是如何进行隔离的;数据的复制机制与数据的完整性要求;每种类型的查询要求的耽误与吞吐量等等。
系统负载越高,依据利用场景进行定制化就越紧张,而且定制将会变的越精细。没有一个系统可以或许同时适用全部不同的业务场景。如果系统适用于广泛的场景,在负载高的环境下,要兼顾全部的场景,那么将不得不做出选择。是要平衡照旧要效率?
2、行存储、列存储对比

Row-basedColumn-based写入每一行的全部字段都存在一起
长处:对数据进行插入和修改操作很方便当一条新数据到来,每一列单独存储
缺点:插入和修改操作麻烦查询查询时纵然只涉及某几列,全部数据也都会被读取
长处:适合随机查询;在整行的读取上,要优于列式存储
缺点:行式存储不适合扫描,这意味着要查询一个范围的数据查询时只有涉及到的列会被读取
缺点:查询完成时,被查询的列要重新进行组装寻道范围读取数据的时候硬盘寻址范围很大由于仅对需要的列进行查找,因此硬盘寻道范围小索引缺点:要加快查询的话需要建立索引,建立索引需要花费很多时间长处:任何列都能作为索引(每一列单独存储,查询个别列的时候,可以仅读取需要的那几个列,相称于为每一列都建立了索引)压缩缺点:倒霉于压缩把一列数据保存在一起,而一列的数据类型相同
长处:利于压缩空间按行存储,倒霉于压缩,压缩比较差,占空间大列式存储的时候可以为每一列创建一个字典,存储的时候就仅存储数字编码即可,降低了存储空间需求聚合倒霉于聚合操作按列存储,利于数据聚合操作利用场景OLTP(存储关系型数据,用于利用数据的时候需要常常用到数据之间的依赖关系的场景,即读取的时候需要整行数据大概整行中大部门列的数据,需要常常用到插入、修改操作)OLAP(分布式数据库和数据堆栈,适合于对大量数据进行统计分析,列与列之间关联性不强,仅进行插入和读取操作的场景) (1)数据写入对比
行存储的写入是一次完成。如果这种写入建立在操作系统的文件系统上,可以保证写入过程的成功大概失败,数据的完整性因此可以确定。
列存储由于需要把一行记载拆分成单列保存,写入次数明显比行存储多(意味着磁头调度次数多,而磁头调度是需要时间的,一样寻常在1ms~10ms),再加上磁头需要在盘片上移动和定位花费的时间,实际时间消耗会更大。以是,行存储在写入上占据很大的上风。
另有数据修改,这实际也是一次写入过程。不同的是,数据修改是对磁盘上的记载做删除标记。行存储是在指定位置写入一次,列存储是将磁盘定位到多个列上分别写入,这个过程照旧行存储的列数倍。以是,数据修改也是以行存储占优。
行式存储的上风是写操作。基于行存的数据,在写入、更新、删除时,只需要找到这一行进行一次操作即可。在读取方面,哪怕只想读取此中的一列都需要找到整行,再从整行中进行读取。
(2)数据读取对比
数据读取时,行存储通常将一行数据完全读出,如果只需要此中几列数据的环境,就会存在冗余列,出于收缩处置惩罚时间的考量,消除冗余列的过程通常是在内存中进行的。
列存储每次读取的数据是聚集的一段大概全部,不存在冗余性问题。
由于列存储的每一列数据类型是同质的,不存在二义性问题。好比说某列数据类型为整型(int),那么它的数据聚集一定是整型数据。这种环境使数据剖析变得非常轻易。相比之下,行存储则要复杂得多,因为在一行记载中保存了多种类型的数据,数据剖析需要在多种数据类型之间频繁转换,这个操作很消耗CPU,增加了剖析的时间。以是,列存储的剖析过程更有利于分析大数据。
列存储在查询过程中,可针对各列的运算并发执行(SMP),在内存中聚合完整记载集,可能降低查询相应时间;可在数据列中高效查找数据,无需维护索引(任何列都能作为索引),查询过程中可以或许尽量减少无关IO,克制全表扫描;因为各列独立存储,且数据类型已知,可以针对该列的数据类型、数据量大小等因素动态选择压缩算法,以进步物理存储利用率;如果某一行的某一列没有数据,那在列存储时,就可以不存储该列的值,这将比行式存储更节流空间。
从数据的压缩以及更性能的读取来对比,列存储由于是同质性数据,可以针对性的进行数据压缩和查询性能提升。
3、列式存储的上风

3.1 高效的数据压缩

传统的行式存储数据库将一行中的全部数据存储在一起,这意味着每次数据访问都需要读取整个行,包罗了多个不同类型的数据,导致压缩效率低下。而列式存储数据库则将相同类型的数据放在一起,这样可以接纳更加高效的压缩算法,可以大幅度地提升数据压缩的效率。


  • 运行长度编码(RLE)可以将重复的值压缩成一个值和一个计数器,这在数据重复较多的环境下效果显著;
  • 差分编码(Delta Encoding)通过存储差别值而不是实际值,减少了存储空间;
  • 字典编码(Dictionary Encoding)则通过建立字典来更换原始数据,从而减少了存储的位数。
由于这些高效的压缩算法,列式存储数据库在存储大量数据时可以或许显著减少存储空间占用,从而降低存储成本。
3.2 加快查询性能

列式存储数据库在查询性能方面具有显著上风。因为查询通常只涉及到特定的列,而不是整个行,以是列式存储只需要读取相干的列数据,从而减少了I/O操作。
比方,在一个包罗数百万行的大型数据库中,如果只需要查询某一个列的数据,列式存储数据库只需读取该列的数据,而行式存储数据库则需要读取每一行的全部数据。这种差别在大规模数据查询时尤为明显,可以显著提升查询性能。
此外,列式存储数据库可以利用列上的索引和压缩算法,加快数据检索和过滤操作。
比方,在执行聚合查询(如SUM、AVG等)时,列式存储数据库可以直接操作压缩后的数据,从而减少盘算量和内存占用。这使得列式存储数据库在处置惩罚数据堆栈和大数据分析场景中体现尤为出色。
3.3 降低存储成本

列式存储数据库通过高效的数据压缩显著降低了存储成本。传统的行式存储数据库需要为每一行存储完整的数据,而列式存储数据库则可以利用数据的重复性和相似性,大幅度减少存储空间。比方,在一个包罗大量重复值的数据库中,列式存储可以通过运行长度编码将重复值压缩为一个值和一个计数器,从而节流大量存储空间。更少的存储空间意味着更低的存储成本,不仅在硬件投入上减少了开支,还能降低数据传输和处置惩罚时的能源消耗。此外,列式存储数据库的高效压缩还可以进步数据的传输速度,减少网络带宽的占用,从而进一步降低运营成本。
3.4 优化读操作

列式存储数据库在读操作方面具有显著上风,尤其在数据分析和报表天生等读密集型应用中体现突出。因为列式存储数据库将相同类型的数据存储在一起,可以利用缓存更高效地读取数据。比方,在进行大规模数据分析时,列式存储数据库可以一次性读取整列数据,并通过并行处置惩罚加快查询操作。这不仅减少了I/O操作,还能充分利用多核处置惩罚器的盘算能力,从而显著进步读操作的性能。此外,列式存储数据库的压缩算法可以减少数据读取量,进一步优化读操作。比方,在执行数据筛选和过滤操作时,列式存储数据库可以直接操作压缩后的数据,从而减少数据读取量和内存占用。这使得列式存储数据库在处置惩罚大规模数据集时,可以或许提供更快的相应速度和更高的查询效率。
3.5 增强数据分析能力

列式存储数据库在数据分析能力方面具有显著上风,尤其在处置惩罚大规模数据集和复杂查询时体现出色。因为列式存储数据库将相同类型的数据存储在一起,可以更高效地执行聚合查询和分析操作。比方,在进行数据聚合(如SUM、AVG、MAX等)时,列式存储数据库可以直接操作压缩后的数据,从而减少盘算量和内存占用。此外,列式存储数据库的高效压缩和查询性能,使得它在及时数据分析和报表天生方面体现优秀。比方,在进行及时数据分析时,列式存储数据库可以快速读取和处置惩罚大量数据,提供即时的分析效果和决策支持。这使得列式存储数据库在数据驱动的业务决策和大数据分析中,成为不可或缺的紧张工具。
10、参考资料



  • 数据堆栈:行式存储VS列式存储
  • 什么是ClickHouse

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

伤心客

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表