什么是柱状数据库?

问题描述 投票:88回答:7

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

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

我有多部分问题:

  • Columnar数据库如何工作?
  • 它们与关系数据库有何不同?
sql database
7个回答
46
投票

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

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

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

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

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

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

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


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 

这与传统的rowstore形成对比,后者将存储数据更像这样:

S120LondonSmith;S210ParisJones;S330ParisBlake;S420LondonClark;S530AthensAdams

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

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


3
投票

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


2
投票

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

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

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


1
投票

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

http://www.vertica.com/

http://www.paraccel.com/

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


1
投票

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


1
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.