ces*_*are 47 data-modeling column-oriented cassandra nosql
在互联网上阅读几篇论文和文档,我发现了很多关于Cassandra数据模型的矛盾信息.有许多将其识别为面向列的数据库,其他作为面向行的数据库,然后将其定义为两者的混合方式.
根据我对Cassandra如何存储文件的了解,它使用*-Index.db文件访问*-Data.db文件的正确位置,在该文件中存储了bloom过滤器,列索引,然后是列的要求的行.
在我看来,这是严格的行导向.有什么我想念的吗?
DNA*_*DNA 52
是的,"以列为导向"的术语有点令人困惑.
Cassandra中的模型是行包含列.要访问最小的数据单元(列),您必须首先指定行名(键),然后指定列名.
因此,在一个名为familyfamily的家庭中,Fruit您可以拥有类似以下示例的结构(包含2行),其中水果类型是行键,每列都有名称和值.
apple -> colour weight price variety
"red" 100 40 "Cox"
orange -> colour weight price origin
"orange" 120 50 "Spain"
Run Code Online (Sandbox Code Playgroud)
与基于表的关系数据库的一个区别是,可以省略列(橙色没有变化),或者随时添加任意列(橙色具有原点).您仍然可以将上面的数据想象为一个表,尽管是一个稀疏的数据,其中许多值可能为空.
但是,"面向列的"模型也可用于列表和时间序列,其中每个列名称都是唯一的(这里我们只有一行,但我们可能有数千或数百万列):
temperature -> 2012-09-01 2012-09-02 2012-09-03 ...
40 41 39 ...
Run Code Online (Sandbox Code Playgroud)
这与关系模型完全不同,后者必须将时间序列的条目建模为rows不columns.这种用法通常称为"宽行".
tha*_*_DG 45
Cassandra是一个分区行商店.行被组织成具有所需主键的表.
分区意味着Cassandra可以在应用程序透明的事物中跨多台计算机分发您的数据.随着机器被添加到群集中并从群集中删除,Cassandra将自动重新分区.
行存储意味着像关系数据库一样,Cassandra按行和列组织数据.
面向列或列式数据库以列方式存储在磁盘上.
例如:表格Bonuses表
ID Last First Bonus
1 Doe John 8000
2 Smith Jane 4000
3 Beck Sam 1000
Run Code Online (Sandbox Code Playgroud)在面向行的数据库管理系统中,数据将如下存储: 1,Doe,John,8000;2,Smith,Jane,4000;3,Beck,Sam,1000;
在面向列的数据库管理系统中,数据将按如下方式存储:
1,2,3;Doe,Smith,Beck;John,Jane,Sam;8000,4000,1000;
Cassandra基本上是一个专栏店
"Bounses" : {
row1 : { "ID":1, "Last":"Doe", "First":"John", "Bonus":8000},
row2 : { "ID":2, "Last":"Smith", "First":"Jane", "Bonus":4000}
...
}
希望这可以帮助.
use*_*236 11
你们两个都很好,可能会让人感到困惑.在示例中
apple -> colour weight price variety
"red" 100 40 "Cox"
Run Code Online (Sandbox Code Playgroud)
apple是键值,列是数据,包含所有4个数据项.从描述中可以看出,所有4个数据项一起存储为单个对象,然后由应用程序解析以提取所需的值.因此,从IO的角度来看,我需要读取整个对象.恕我直言,这本质上是基于行(或对象)而不是基于列.
基于列的存储在仓库中变得流行,因为它为全表扫描(DW)提供极端压缩和减少的IO,但是当您需要拉动每一列(选择*)时,以增加IO的IO为代价.大多数查询不需要每列,并且由于压缩,只需几列就可以大大减少IO的全表扫描.让我举个例子
apple -> colour weight price variety
"red" 100 40 "Cox"
grape -> colour weight price variety
"red" 100 40 "Cox"
Run Code Online (Sandbox Code Playgroud)
我们有两种不同的水果,但都有颜色=红色.如果我们将颜色存储在单独的磁盘页面(块)中,不受重量,价格和变化的影响,那么唯一存储的就是颜色,那么当我们压缩页面时,由于大量的重复数据删除,我们可以实现极端压缩.我们可以存储10,000种颜色,而不是在页面中存储100行(假设).现在要读取所有颜色为红色的内容,它可能是1 IO而不是数千个IO,这对于仓储和分析非常有用,但如果我需要更新整个行,那么OLTP会很糟糕,因为该行可能有数百列和一个更新(或插入)可能需要数百个IO.
除非我遗漏了一些我不会称之为柱状的东西,否则我称之为基于对象.关于如何在磁盘上排列对象仍然不清楚.多个对象是否放在同一磁盘页面中?有没有办法确保具有相同元数据的对象一起使用?至于一个水果可能包含不同于另一个水果的数据,因为它只是元数据或xml或者你想要存储在对象本身中的任何东西,有没有办法确保某些匹配的水果类型存储在一起以提高效率?
拉里
小智 5
列族并不意味着它是面向列的。Cassandra是列家族,但不是面向列的。它将行及其所有列族存储在一起。
Hbase是列族,并且以面向列的方式存储列族。不同的列族分别存储在一个节点中,或者它们甚至可以驻留在不同的节点中。
| 归档时间: |
|
| 查看次数: |
24281 次 |
| 最近记录: |