我从事仓储工作已有一段时间了。
列型数据库及其为数据检索提供的速度令我着迷。
我有多部分的问题:
- 列式数据库如何工作?
- 它们与关系数据库有何不同?
我从事仓储工作已有一段时间了。
列型数据库及其为数据检索提供的速度令我着迷。
我有多部分的问题:
Answers:
列式数据库如何工作?
列式数据库是一个概念,而不是特定的体系结构/实现。换句话说,对于这些数据库的工作方式没有一个特定的描述。实际上,有几种是基于传统的,面向行的DBMS构建的,它们只是将信息存储在具有一列(或通常是两列)的表中(并添加了必要的层以轻松方式访问列数据)。
它们与关系数据库有何不同? 它们通常在以下方面与传统(面向行)数据库不同:
...在DBMSes的特定用例中。
特别是,它们在典型用途是在有限数量的列上计算聚合值时在上述领域提供了优势,与尝试为给定实体检索所有/大多数列相反。
我可以安装一个柱状数据库的试用版吗?(我在Windows 7上)
是的,有商业,免费和开源的列式数据库实现。请参阅 Wikipedia文章结尾处的列表以了解入门。
请注意,引入了其中的几种实现方式来满足特定需求(例如,非常小的占用空间,高度可压缩的数据分发或备用矩阵仿真等),而不是本身提供面向通用列的DBMS。
注意:关于几个柱状DBMS的“单一目的方向”的评论不是对这些实现的批评,而是一种额外的迹象,表明这种DBMS的方法偏离了更为“自然”的(当然肯定是使用更广泛的)方法。存储记录实体。结果,这种方法在面向行的方法不令人满意时使用,因此倾向于
a)针对特定目的b)获得的资源/兴趣少于在“通用”,“尝试和已测试”,表格方法。
暂时,实体属性值(EAV)数据模型可能是您可能要考虑的替代存储策略。尽管与“纯”柱状数据库模型不同,EAV具有柱状数据库的一些特征。
柱状数据库如何工作? 列存储的定义概念是表的值按列连续存储。因此,来自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或多或少地遵循关系原理一样。
我想说,了解面向列数据库的最佳人选是检查HBase(Apache Hbase)。您检出代码并进一步探索以了解实现。
此外,列式数据库具有内置的数据压缩亲和力,并且加载过程是唯一的。这是一篇文章我在2008年撰写,解释了更多内容。
您可能还对IDC的Carl Olofson关于第三代DBMS技术的新报告感兴趣。它讨论了柱状,等。如果您不是IDC客户,则可以在我们的网站上免费获得它。他也将于6月16日举行网络研讨会(也在我们的网站上)。
(顺便说一句,上面的一则评论列出了asterdata,但我不认为它们是柱状的。)
要了解什么是面向列的数据库,最好将其与面向行的数据库进行对比。
面向行的数据库(例如MS SQL Server和SQLite)旨在有效地返回整个行的数据。它通过将一行的所有列值存储在一起来实现。面向行的数据库非常适合OLTP系统(例如,零售和金融交易系统)。
面向列的数据库旨在有效地返回有限数量的列的数据。通过将列的所有值存储在一起来完成此操作。两个广泛使用的面向列的数据库是Apache Hbase和Google BigTable(由Google用于其搜索,分析,地图和Gmail)。它们适用于大数据项目。面向列的数据库将在有限数量的列上胜于读取操作,但是与面向行的数据库相比,写操作将很昂贵。
有关更多信息:https : //en.wikipedia.org/wiki/Column-directional_DBMS