数据库必知词汇:列式存储

简介: 数据库表的列式存储(Column-oriented Storage)是优化分析查询性能方面的一个重要因素,因为它将大大降低总体磁盘 I/O 要求并减少需从磁盘加载的数据量。在典型的关系数据库表中,每个行均包含一条记录的字段值。在行式数据库存储中,数据块按顺序存储每个连续列(构成整个行)的值。如果数据块大小小于记录的大小,整个记录的存储可采用多个数据块。如果块大小大于记录的大小,整个记录的存储可能采用 1 个以上的数据块,从而导致磁盘空间的使用低效。

数据库表的列式存储(Column-oriented Storage)是优化分析查询性能方面的一个重要因素,因为它将大大降低总体磁盘 I/O 要求并减少需从磁盘加载的数据量。在典型的关系数据库表中,每个行均包含一条记录的字段值。在行式数据库存储中,数据块按顺序存储每个连续列(构成整个行)的值。如果数据块大小小于记录的大小,整个记录的存储可采用多个数据块。如果块大小大于记录的大小,整个记录的存储可能采用 1 个以上的数据块,从而导致磁盘空间的使用低效。在线事务处理 (OLTP) 应用程序中,大多数事务涉及频繁读取和写入整个记录的所有值,通常一次读取和写入一条记录或几条记录。最终,行式存储已针对 OLTP 数据库进行优化。

使用列式存储,每个数据块可为多个行存储一个列的值。由于每个块可保留相同类型的数据,因此块数据可使用专为列数据类型选择的压缩方案,进一步减少磁盘空间和 I/O。

磁盘上用于存储数据的空间节省将继续存在,以便检索数据并将其存储在内存中。由于许多数据库操作一次只需访问或操作一个或几个列,您可通过仅检索查询实际所需的列的数据块来节省内存空间。其中,OLTP 事务通常涉及少量记录的一个行中的大多数列或所有列,数据仓库查询通常仅读取大量行的几个列。这意味着,读取相同数目的行的相同数目的列字段值需要一小部分 I/O 操作并使用处理行式块所需的内存的一部分。实际上,通过使用具有大量列和行的表,可大幅提高效率。例如,假定一个表包含 100 个列。使用 5 个列的查询仅需读取表中 5% 的数据。对于大型数据库,可为数十亿或甚至数万亿记录实现此节省。相反,一个行式数据库将读取包含 95 个不需要的列的数据块。

列式存储的优点如下:

  • 极高的装载速度(最高可以等于所有硬盘IO 的总和,基本是极限了)
  • 适合大量的数据而不是小数据
  • 实时加载数据仅限于增加(删除和更新需要解压缩Block 然后计算然后重新压缩储存)
  • 高效的压缩率,不仅节省储存空间也节省计算内存和CPU。
  • 非常适合做聚合操作。

列式存储的缺点如下:

  • 不适合扫描小量数据
  • 不适合随机的更新
  • 批量更新情况各异,有的优化的比较好的列式数据库(比如Vertica)表现比较好,有些没有针对更新的数据库表现比较差。
  • 不适合做含有删除和更新的实时操作。

资料来源:
列式存储 https://docs.amazonaws.cn/redshift/latest/dg/c_columnar_storage_disk_mem_mgmnt.html
处理海量数据:列式存储综述(存储篇) https://zhuanlan.zhihu.com/p/35622907
浅析列式数据库的特点 https://searchdatabase.techtarget.com.cn/7-20958/

相关文章
|
存储 安全 数据库
数据库必知词汇:分级存储
分级存储是将数据采取不同的存储方式分别存储在不同性能的存储设备上,减少非重要性数据在一级本地磁盘所占用的空间,还可加快整个系统的存储性能。
996 0
|
存储 算法 NoSQL
【数据库系列】什么是列式存储和行式存储
列式存储:每一列单独存放,数据即是索引。只访问涉及得列,如果我们想访问单独一列(比如NAME)会相当迅捷。一行数据包含一个列或者多个列,每个列一单独一个cell来存储数据。行式存储: 把一行数据作为一个整体来存储。学习:https://blog.csdn.net/qq_43543789/article/details/108662140。......
606 0
【数据库系列】什么是列式存储和行式存储
|
存储 JSON NoSQL
数据库必知词汇:Cassandra
Apache Cassandra是一套开源分布式NoSQL数据库系统。它最初由Facebook开发,用于储存收件箱等简单格式数据,集Google BigTable的数据模型与Amazon Dynamo的完全分布式的架构于一身Facebook于2008将 Cassandra 开源,此后,由于Cassandra良好的可扩展性,被Digg、Twitter等知名Web 2.0网站所采纳,成为了一种流行的分布式结构化数据存储方案,线性可扩展性和在商用硬件或云基础架构上经过验证的容错能力使它成为关键任务数据的理想平台。
981 0
|
分布式计算 负载均衡 算法
数据库必知词汇:Zookeeper
ZooKeeper是用于维护配置信息、命名、提供分布式同步以及提供组服务的集中式服务。ZooKeeper是Google的Chubby一个开源的实现,是Hadoop和HBase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,构成一个高效可靠的原语集,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
362 0
|
SQL 存储 分布式计算
数据库必知词汇:Hive
Hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。Apache Hive数据仓库软件有助于使用SQL读取,写入和管理驻留在分布式存储中的大型数据集。 可以将结构投影到已经存储的数据上。 提供了命令行工具和JDBC驱动程序以将用户连接到Hive。
852 0
|
SQL 分布式计算 数据挖掘
数据库必知词汇:Pig
Apache Pig 是一个高级过程语言,特点是其结构易于大量并行化,适合于使用 Hadoop 和 MapReduce 平台来查询大型半结构化数据集。通过允许对分布式数据集进行类似 SQL 的查询,Pig 可以简化 Hadoop 的使用。
576 0
|
机器学习/深度学习 存储 分布式计算
数据库必知词汇:Mahout
Mahout 是 Apache基金会旗下的一个开源项目,其提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout包含许多实现,包括聚类、分类、推荐过滤、频繁子项挖掘。此外,通过使用 Apache Hadoop 库,Mahout 可以有效地扩展到云中。
395 0
|
SQL 分布式计算 Oracle
数据库必知词汇:Sqoop
Apache Sqoop是一个用于在Apache Hadoop和关系数据库等结构化数据存储之间高效传输大容量数据的开源工具。主要用于在Hadoop(Hive)与传统的数据库间进行数据的传递,可以将一个关系型数据库(例如 :MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。此外,对于某些NoSQL数据库Sqoop也提供了连接器。
467 0
|
Apache 数据库
数据库必知词汇:Flume
Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。Flume具有简单灵活的基于流数据流的体系结构。它具有鲁棒性和容错性,具有可调的可靠性机制和许多故障转移和恢复机制。Flume使用一个简单的可扩展数据模型,允许在线分析应用程序。Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
437 0
|
存储 缓存 API
数据库必知词汇:Memcached
Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。
347 0