什么是柱状数据库?

时间:2010-01-25 14:45:47

标签: sql database

我一直在仓库工作一段时间。

我对Columnar数据库以及它们为数据检索提供的速度感兴趣。

我有多部分问题:

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

7 个答案:

答案 0 :(得分:236)

柱状数据库如何工作?  列存储的定义概念是表的值按列连续存储。因此,来自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可能或多或少地遵守关系原则一样。

答案 1 :(得分:46)

柱状数据库如何工作?
列式数据库是概念而不是特定的架构/实现。换句话说,没有关于这些数据库如何工作的特定描述;实际上,有些是基于传统的,面向行的DBMS构建的,只需将信息存储在具有一列(或通常是两列)的表中(并添加必要的层以便以简单的方式访问列式数据)。

它们与关系数据库有何不同? 它们通常与传统(面向行)数据库有所不同......

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

...在DBMS的特定用例中 特别是当在典型用途上计算有限数量的列上的聚合值时,它们在所提到的区域中提供优势,而不是尝试并检索给定实体的所有/大多数列。

是否有我可以安装的柱状数据库的试用版? (我在Windows 7上) 是的,有柱状数据库的商业,免费和开源实现。请参阅Wikipedia article末尾的列表作为入门名单 请注意,引入了其中一些实现来解决特定需求(比如非常小的占用空间,高度可压缩的数据分布或备用矩阵仿真等),而不是提供一个通用的面向列的DBMS -se。

注意:关于几个柱状DBMS的“单一目的”的评论并不是对这些实现的批评,而是对DBMS的这种方法偏离更“自然”(并且当然更广泛使用)的另一个指示)存储记录实体的方法。结果,当面向行的方法不令人满意时使用这种方法,因此倾向于   a)针对特定目的进行攻击   b)获得的资源/利息少于“通用”,“试验和测试”,表格方法的工作。

暂时, Entity-Attribute-Value (EAV)数据模型可能是您可能需要考虑的替代存储策略。虽然不同于“纯”柱状DB模型,但EAV具有柱状DB的几个特征。

答案 2 :(得分:3)

我想说理解面向列的数据库的最佳候选者是检查HBase(Apache Hbase)。您需要签出代码并进一步探索以了解实施情况。

答案 3 :(得分:2)

此外,Columnar DB具有内置的数据压缩关联性,并且加载过程是唯一的。这是我在2008年写的article,它解释了更多。

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

(顺便说一下,上面的一条评论列出了星号,但我不认为它们是柱状的。)

答案 4 :(得分:1)

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

http://www.vertica.com/

http://www.paraccel.com/

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

答案 5 :(得分:1)

kx是另一个列式数据库,例如在金融部门中使用。不过,上次检查时,许可证的价格是5万美元。不需要优化,不需要索引,因为kx具有强大的运算符(matlab等价物:.*kronbsxfun,...)。

答案 6 :(得分:1)

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

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

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

更多信息:https://en.wikipedia.org/wiki/Column-oriented_DBMS