什么是柱状数据库?


97

我从事仓储工作已有一段时间了。

列型数据库及其为数据检索提供的速度令我着迷。

我有多部分的问题:

  • 列式数据库如何工作?
  • 它们与关系数据库有何不同?

1
除了答案中提到的减少的查找数之外,某些实现(例如SQL Server的列存储)将压缩数据。这样可以防止行过滤,但可以进一步提高查询性能。
佩斯

Answers:


49

列式数据库如何工作?
列式数据库是一个概念,而不是特定的体系结构/实现。换句话说,对于这些数据库的工作方式没有一个特定的描述。实际上,有几种是基于传统的,面向行的DBMS构建的,它们只是将信息存储在具有一列(或通常是两列)的表中(并添加了必要的层以轻松方式访问列数据)。

它们与关系数据库有何不同? 它们通常在以下方面与传统(面向行)数据库不同:

  • 性能...
  • 储存要求...
  • 易于修改架构...

...在DBMSes的特定用例中
特别是,它们在典型用途是在有限数量的列上计算聚合值时在上述领域提供了优势,与尝试为给定实体检索所有/大多数列相反。

我可以安装一个柱状数据库的试用版吗?(我在Windows 7上) 是的,有商业,免费和开源的列式数据库实现。请参阅 Wikipedia文章结尾处的列表以了解入门。
请注意,引入了其中的几种实现方式来满足特定需求(例如,非常小的占用空间,高度可压缩的数据分发或备用矩阵仿真等),而不是本身提供面向通用列的DBMS。

注意:关于几个柱状DBMS的“单一目的方向”的评论不是对这些实现的批评,而是一种额外的迹象,表明这种DBMS的方法偏离了更为“自然”的(当然肯定是使用更广泛的)方法。存储记录实体。结果,这种方法在面向行的方法不令人满意时使用,因此倾向于
a)针对特定目的b)获得的资源/兴趣少于在“通用”,“尝试和已测试”,表格方法。

暂时,实体属性值(EAV)数据模型可能是您可能要考虑的替代存储策略。尽管与“纯”柱状数据库模型不同,EAV具有柱状数据库的一些特征。


253

柱状数据库如何工作? 列存储的定义概念是表的值按列连续存储。因此,来自CJ Date的供应商和零件数据库的经典供应商表:

SNO  STATUS CITY    SNAME
---  ------ ----    -----
S1       20 London  Smith
S2       10 Paris   Jones
S3       30 Paris   Blake
S4       20 London  Clark
S5       30 Athens  Adams

将存储在磁盘或内存中,例如:

S1S2S3S4S5;2010302030;LondonParisParisLondonAthens;SmithJonesBlakeClarkAdams 

这与传统的行存储相反,传统的行存储更像这样存储数据:

S120LondonSmith;S210ParisJones;S330ParisBlake;S420LondonClark;S530AthensAdams

从这个简单的概念可以看出,列存储和行存储之间性能的所有基本差异(无论好坏)。例如,列存储将擅长进行总计和平均值之类的聚合,但是插入单个行可能会很昂贵,而相反的情况适用于行存储。从上图可以明显看出这一点。

它们与关系数据库有何不同? 关系数据库是一个逻辑概念。列式数据库或列存储是一个物理概念。因此,这两个术语在任何有意义的方式上都是不可比的。面向列的DMBS可能是关系的,也可能不是关系的,就像面向行的DBMS或多或少地遵循关系原理一样。


22
这似乎比公认的答案更好,但我不是专家。赞成。
罗伯·格兰特

2
面向列的数据库用于查询特定列的汇总,例如销售报告。这里的要点是,如果您使用面向行的数据库,则所有行(块)都需要带到主内存,这包括从磁盘获取大量时间,以便将所有块从磁盘带到内存,即使您仅对列感兴趣这可以帮助您提供销售报告。而在面向列的方案中,列是连续存储在块中的,由于块的数量较少,因此查找较少。因此,列数据库用于OLAP,而面向行的用于OLTP。
bharatj

4

我想说,了解面向列数据库的最佳人选是检查HBase(Apache Hbase)。您检出代码并进一步探索以了解实现。


2

此外,列式数据库具有内置的数据压缩亲和力,并且加载过程是唯一的。这是一篇文章我在2008年撰写,解释了更多内容。

您可能还对IDC的Carl Olofson关于第三代DBMS技术的新报告感兴趣。它讨论了柱状,等。如果您不是IDC客户,则可以在我们的网站上免费获得它。他也将于6月16日举行网络研讨会(也在我们的网站上)。

(顺便说一句,上面的一则评论列出了asterdata,但我不认为它们是柱状的。)


您可以通过以下网址
kim stanick 2010年

Aster Data是MPP关系数据库,它对列表具有本机支持。
topchef 2012年

@ kimstanick,paraccel URL已死。
user674669 2014年

2

要了解什么是面向列的数据库,最好将其与面向行的数据库进行对比。

面向行的数据库(例如MS SQL Server和SQLite)旨在有效地返回整个行的数据。它通过将一行的所有列值存储在一起来实现。面向行的数据库非常适合OLTP系统(例如,零售和金融交易系统)。

面向列的数据库旨在有效地返回有限数量的列的数据。通过将列的所有值存储在一起来完成此操作。两个广泛使用的面向列的数据库是Apache Hbase和Google BigTable(由Google用于其搜索,分析,地图和Gmail)。它们适用于大数据项目。面向列的数据库将在有限数量的列上胜于读取操作,但是与面向行的数据库相比,写操作将很昂贵。

有关更多信息:https : //en.wikipedia.org/wiki/Column-directional_DBMS


1

产品信息。这可能会有所帮助。这些都是Google搜索中的特色产品。

http://www.vertica.com/

http://www.paraccel.com/

http://www.asterdata.com/index.php


关于Vertica需要注意的一件事是,我在网上看到一个有关许可证成本为15万美元/ TB数据存储的参考。所以它并不便宜。
马克

@Mark:成本不是问题。信息是问题。如果OP需要信息,则供应商通常是最好的来源。
S.Lott

1
如果您不是特别喜欢Columnar,那么Amazon会提供其超快速的RedShift数据存储,每年每TB $ 1,000以下。
mevdiven

1

kx是另一个柱状数据库,例如用于金融部门。不过,上次我检查许可证的费用为5万美元。没有必要的优化,没有索引需要的,因为KX具有强大的运营商(MATLAB当量:.*kronbsxfun,...)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.