什么是柱状数据库?

Raj*_*ore 91 sql database

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

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

我有多部分问题:

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

小智 244

柱状数据库如何工作? 列存储的定义概念是表的值按列连续存储.因此,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
Run Code Online (Sandbox Code Playgroud)

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

S1S2S3S4S5;2010302030;LondonParisParisLondonAthens;SmithJonesBlakeClarkAdams 
Run Code Online (Sandbox Code Playgroud)

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

S120LondonSmith;S210ParisJones;S330ParisBlake;S420LondonClark;S530AthensAdams
Run Code Online (Sandbox Code Playgroud)

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

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

  • 这似乎比接受的答案要好,但我不是专家.给予好评. (21认同)
  • 使用面向列的数据库,其中查询特定列上的聚合,如销售报告.这里的要点是如果你使用面向行的数据库,那么所有的行(块)都需要被带到主内存,这包括从磁盘中获取大量的搜索时间以将所有块从磁盘带到ram,即使你只对列感兴趣这有助于您提供销售报告.而在面向列的方案中,列连续地存储在块中,这由于较少的块数而导致较少的搜索.因此,列数据库用于OLAP,而面向行的数据用于OLTP. (2认同)

mjv*_*mjv 47

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

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

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

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

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

注意:关于几个柱状DBMS的"单一目的"的说法并不是对这些实现的批评,而是对DBMS的这种方法从更"自然"(当然也更广泛使用)方法的一种额外指示.存储记录实体.因此,当面向行的方法不令人满意时使用这种方法,因此倾向于
a)针对特定目的b)获得比"通用","尝试和"工作更少的资源/利益.经测试",表格式方法.

暂时,实体 - 属性 - 值(EAV)数据模型可能是您可能想要考虑的替代存储策略.虽然不同于"纯"柱状DB模型,但EAV具有柱状DB的几个特征.