网址: http://www.penglixun.com/tech/database/column-oriented_dbms_analyse.html
这些天看数据仓库的内容,发现一个新内容——列式存储。曾经有想过把数据库行列转置作成索引,不过没有深想,没想到列式数据库已经开始发展起来了。
首先看下WIKI上对列式数据库的解释:
列式数据库是以列相关存储架构进行数据存储的数据库,主要适合与批量数据处理和即席查询。相对应的是行式数据库,数据以行相关的存储体系架构进行空间分配,主要适合与小批量的数据处理,常用于联机事务型数据处理。
数据库以行、列的二维表的形式存储数据,但是却以一维字符串的方式存储,例如以下的一个表:
EmpId Lastname Firstname Salary
1 Smith Joe 40000
2 Jones Mary 50000
3 Johnson Cathy 44000
这个简单的表包括员工代码(EmpId), 姓名字段(Lastname and Firstname)及工资(Salary).
这个表存储在电脑的内存(RAM)和存储(硬盘)中。虽然内存和硬盘在机制上不同,电脑的操作系统是以同样的方式存储的。数据库必须把这个二维表存储在一系列一维的“字节”中,又操作系统写到内存或硬盘中。
行式数据库把一行中的数据值串在一起存储起来,然后再存储下一行的数据,以此类推。
1,Smith,Joe,40000;2,Jones,Mary,50000;3,Johnson,Cathy,44000;
列式数据库把一列中的数据值串在一起存储起来,然后再存储下一列的数据,以此类推。
1,2,3;Smith,Jones,Johnson;Joe,Mary,Cathy;40000,50000,44000;
这是一个简化的说法。
昨天装了下两个基于MySQL的数据仓库,infindb和infobright,看了文档发现它们都是列式数据库,把40多M的数据导入infobright,没想到数据文件只有1M多,压缩比令我惊讶!
然后测试了下选择某一列,在列上做计算,都比MyISAM和InnoDB要快,看了一些原理文档,就自己模拟了一下,写了个程序测试。
从内存中读取效率很高,但是从磁盘中读取(假设行式数据库的索引在内存中)比行式数据库要慢(开始在Twitter上说比行式快是程序写错了),不过我觉得还是我设计上的问题,至少Infobright就比MyISAM/InnoDB快,列式应该也有其特殊的索引机制和缓存机制,例如每列分开存在不同的文件,这样文件指针转移会更快。
2010-02-04补充:采用了多个文件指针后,列式存储明显加速,如果给每个列一个文件指针,效率会非常高,也可以肯定,如果每个列单独存储一个文件,效率还会提高。现在文件中列式表读取效率降低了4/5,接近行式表了。继续优化还能提高。
代码请展开:
2010-02-04测试结果:
======生成数据======
+—–静态数据—–+
分配空间中……
空间分配完毕!
分配空间耗时: 0ms
生成数据中……
数据生成完毕!
生成数据耗时: 4180ms
正在将数据写入文件……
数据写入完毕!
写入数据耗时: 2480ms
静态行式存储耗费空间: 495M
静态列式存储耗费空间: 259M
+—–动态数据—–+
=====内存存取测试=====
+—-静态表测试中—-+
*行式存储*
正在测试内存中读取行式静态表……
内存中行式静态表读取测试完毕!
读取耗时:10 ms
正在测试内存中列式静态表读取……
内存中列式静态存储表读取测试完毕!
读取耗时:0 ms
*列式存储*
正在测试磁盘中读取行式静态表……
磁盘中行式静态表读取测试完毕!
读取耗时:190 ms
正在测试磁盘中列式静态表读取……
磁盘中列式静态存储表读取测试完毕!
读取耗时:210 ms
共匹配:69650 行
All OK!
分享到:
相关推荐
### 列式数据库存储原理详解 #### 一、引言 在大数据时代,随着数据量的不断增长,传统的行式数据库已经无法满足高效查询的需求。列式数据库作为一种新型的数据存储方式,通过改变数据的存储结构,实现了对大量...
### 列式数据库存储原理 #### 一、传统行式存储概述 在传统的数据库系统中,数据主要采用行式存储的方式。这种方式下,一条记录的所有字段(即列)被存储在一起形成一行。这样的存储方式直观且易于理解,适用于...
列式数据库与传统的行式数据库不同,它将数据按列存储,而非按行。这种设计对于分析大量数据特别有利,因为大多数分析查询通常涉及对少数列的操作。SYBASE IQ是最早采用列式存储的数据库管理系统之一,它提供高数据...
列式数据库是一种以列相关存储架构进行数据存储的数据库,主要适合于批量数据处理和即席查询。它不同于行式数据库,以行相关的存储体系架构进行空间分配,主要适合小批量的数据处理和联机事务型数据处理。 2. 列式...
列式数据库是以列相关存储架构进行数据存储的数据库,主要适合于批量数据处理和即席查询。相对应的是行式数据库,数据以行相关的存储体系架构进行空间分配,主要适合小批量的数据处理,常用于联机事务型数据处理。 ...
HiStore作为一款高性能分析型列式数据库,在存储成本、查询效率、数据维度实时性和数据迁移等方面,都提供了切实可行的解决方案。通过列式存储、高效查询优化算法以及与MySQL生态的完美兼容,HiStore有效地解决了...
与传统的行式数据库不同,列式数据库以列为基础进行数据存储,这种设计特别适合于数据仓库环境中的大量数据分析工作,能够显著提高查询效率和性能。 #### 二、Sybase列式数据库机特点 1. **超高速分析性能** - ...
SYBASE公司推出的 列式数据库指南,讲的很好。
【标题】中的“基于MariaDB的分布式列式数据库”指的是将传统的MySQL数据库系统与MariaDB相结合,构建出一种适用于大数据处理的分布式存储架构。MariaDB是一个开源的关系型数据库管理系统,它在MySQL的基础上进行了...
1. 高效的储存空间利用率:列式数据库的设计理念在于优化数据存储,尤其适用于大数据量的场景。由于列式数据库中的每一列数据类型相同,因此可以实现更紧凑的存储,避免了行式数据库因列长度不一而预留空间的问题。...
内存分布式列式数据库是一种先进的数据存储和管理技术,它将数据以列式存储方式分布在多个计算节点上,利用内存高速存取的优势来提升查询性能。本文深入探讨了内存分布式列式数据库的查询技术和优化策略。 1. **...
列式数据库是一种特殊类型的数据库,它在数据存储时,不是按照行而是按照列来存储。这种存储方式使得数据处理速度更快,尤其是在进行大数据量的聚合查询和分析时,表现更为优异。由于煤矿安全监测需要分析的数据量...
### 四款主流列式数据库横评 #### 一、引言 随着数据量的不断增长,传统的行式存储数据库已经难以满足高效处理大规模数据的需求。列式存储数据库以其独特的数据存储方式,能够显著提高查询速度及降低存储空间需求...
《HBase列式数据库实战详解》 HBase,作为NoSQL数据库家族中的重要成员,尤其在大数据领域扮演着不可或缺的角色。它是一个分布式的、面向列的数据库,特别适合处理大规模数据。本篇将深入探讨HBase的核心操作,包括...
在列式数据库中,数据是以列的方式存储的,这与传统的行式存储方式不同。这样的设计能够极大地提高某些类型的数据查询效率,但在进行数据转换时也会遇到一系列性能上的挑战。 1. **固有的延迟**: - **列式存储...
ClickHouse 作为 OLAP 列式数据库在数仓选型中的重要性 ClickHouse 是一种基于列式存储的 OLAP 数据库管理系统,它可以实时处理大量数据,并提供高性能的查询和分析能力。相比于传统的行式数据库,ClickHouse 的列...