什么是列式数据库?
Posted
技术标签:
【中文标题】什么是列式数据库?【英文标题】:What is a columnar database? 【发布时间】:2010-01-25 14:45:46 【问题描述】:我从事仓储工作已有一段时间了。
我对列式数据库及其为数据检索提供的速度很感兴趣。
我有一个多部分的问题:
列式数据库如何工作? 它们与关系数据库有何不同?【问题讨论】:
除了答案中提到的减少的搜索次数之外,一些实现(例如 SQL 服务器的列存储)将压缩数据。这可以防止行过滤,但可以额外提高查询性能。 【参考方案1】:列式数据库如何工作? 列存储的定义概念是表的值按列连续存储。因此,来自 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 可能或多或少地遵循关系原则。
【讨论】:
这似乎比公认的答案更好,但我不是专家。点赞。 面向列的数据库用于查询特定列的聚合,如销售报告。这里的重点是,如果您使用面向行的数据库,那么所有行(块)都需要被带到主内存,这包括从磁盘到将所有块从磁盘带到内存的大量寻道时间,即使您只对列感兴趣它可以帮助您提供销售报告。而在面向列的方案中,列连续存储在块中,由于块数量较少,因此搜索次数较少。因此,列数据库用于 OLAP,而面向行的数据库用于 OLTP。【参考方案2】:列式数据库如何工作? 列式数据库是一个概念,而不是一个特定的架构/实现。换句话说,没有关于这些数据库如何工作的具体描述。实际上,有几个是基于传统的、面向行的 DBMS 构建的,只需将信息存储在具有一列(或者通常是两列)的表中(并添加必要的层以轻松访问列数据)。
它们与关系数据库有何不同? 它们通常不同于传统的(面向行的)数据库...
性能... 存储要求 ... 易于修改架构 ......在 DBMS 的特定用例中。 特别是,当典型用途是在有限数量的列上计算聚合值时,它们在提到的领域中提供优势,而不是尝试检索给定实体的所有/大多数列。
我可以安装试用版的柱状数据库吗? (我在 Windows 7 上) 是的,列式数据库有商业、免费和开源的实现。请参阅Wikipedia article 末尾的列表以了解初学者。 请注意,这些实现中的一些是为了满足特定需求而引入的(例如非常小的占用空间、高度可压缩的数据分布或备用矩阵仿真等),而不是为每个用户提供通用的面向列的 DBMS -se。
注意:关于几个柱状 DBMS 的“单一目的导向”的评论并不是对这些实现的批评,而是额外表明这种 DBMS 的方法偏离了更“自然”(当然也更广泛使用) 存储记录实体的方法。因此,当面向行的方法不令人满意时使用此方法,因此并倾向于 a) 以特定目的为目标 b) 获得的资源/兴趣少于“通用”、“久经考验”、表格方法的工作。
目前,Entity-Attribute-Value (EAV) 数据模型可能是您可能需要考虑的另一种存储策略。尽管与“纯”列式 DB 模型不同,EAV 具有列式 DB 的几个特征。
【讨论】:
【参考方案3】:我想说了解面向列的数据库的最佳候选者是检查 HBase (Apache Hbase)。您检查代码并进一步探索以了解实现。
【讨论】:
【参考方案4】:此外,列式数据库具有内置的数据压缩亲和力,并且加载过程是独一无二的。这是我在 2008 年写的article,它解释了更多内容。
您可能还对 IDC 的 Carl Olofson 关于第三代 DBMS 技术的新报告感兴趣。它讨论了柱状等。如果您不是 IDC 客户,您可以在我们的网站上免费获得。他也在 6 月 16 日举办网络研讨会(也在我们的网站上)。
(顺便说一句,上面的一条评论列出了asterdata,但我认为它们不是柱状的。)
【讨论】:
您可以通过以下方式获取 IDC 报告:paraccel.com/press/3rd_generation_database_technology Aster Data 是 MPP 关系型数据库,它原生支持柱状表。 @kimstanick,paraccel URL 已失效。【参考方案5】:要了解什么是面向列的数据库,最好将其与面向行的数据库进行对比。
面向行的数据库(例如 MS SQL Server 和 SQLite)旨在有效地返回整行的数据。它通过将一行的所有列值存储在一起来实现。面向行的数据库非常适合 OLTP 系统(例如零售和金融交易系统)。
面向列的数据库旨在有效地返回有限数量的列的数据。它通过将列的所有值存储在一起来实现。两个广泛使用的面向列的数据库是 Apache Hbase 和 Google BigTable(被 Google 用于其搜索、分析、地图和 Gmail)。它们适用于大数据项目。面向列的数据库将擅长对有限数量的列进行读取操作,但是与面向行的数据库相比,写入操作会很昂贵。
更多:https://en.wikipedia.org/wiki/Column-oriented_DBMS
【讨论】:
【参考方案6】:产品信息。这可能会有所帮助。这些是 Google 搜索中的特色产品。
http://www.vertica.com/
http://www.paraccel.com/
http://www.asterdata.com/index.php
【讨论】:
关于 Vertica 需要注意的一点是,我在网络上看到过关于许可成本是 15 万美元/TB 数据存储的参考。所以它并不便宜。 @Mark:成本不是问题。信息是问题。如果 OP 想要信息,供应商通常是最好的来源。 如果您不是特别想要列式存储,亚马逊提供其超快速的 RedShift 数据存储,每年每 TB 的费用低于 1,000 美元。【参考方案7】:kx 是另一个列式数据库,例如用于金融领域。不过,上次我检查时,许可证大约是 5 万美元。不需要优化,不需要索引,因为 kx 具有强大的运算符(matlab 等价物:.*
,kron
,bsxfun
,...)。
【讨论】:
以上是关于什么是列式数据库?的主要内容,如果未能解决你的问题,请参考以下文章