HBase和Cassandra使用行和列的概念构建为宽列存储。
一行由键组成,类似于RDBMS中的主键概念 由多列
组成的值表示可以如下:
*******| Key | Value
-------+------------+-------------+------------------------------------------
Colunms| | name | value
-------+------------+-------------+------------------------------------------
| a | title | "Building a python graphdb in one night"
| b | body | "You maybe already know that I am..."
| c | publishedat | "2015-08-23"
| d | name | database
| e | start | 1
| f | end | 2
... ... ...
| u | title | "key/value store key composition"
... ... ...
| x | title | "building a graphdb with HappyBase"
... ... ...
是否正确在应用程序层,构建允许的组合主键 在colocated行上快速迭代。
这可以如下表示。
*******| Key | Value
-------+------------+-------------+------------------------------------------
Colunms| identifier | name | value
-------+------------+-------------+------------------------------------------
| 1 | title | "Building a python graphdb in one night"
| 1 | body | "You maybe already know that I am..."
| 1 | publishedat | "2015-08-23"
| 2 | name | database
| 3 | start | 1
| 3 | end | 2
... ... ...
| 4 | title | "key/value store key composition"
... ... ...
| 42 | title | "building a graphdb with HappyBase"
... ... ...
name
列从Value
移到Key
,而Value
只有一个
列名value
。
答案 0 :(得分:1)
在设计Cassandra架构时始终使用复合键。
在C *中,密钥分为两部分,分区密钥和聚类列。
分区键用于将数据散列到集群中的节点。分区是一个数据桶,可以根据群集列保存单行或多行。分区中的数据是节点的本地数据,并通过群集键按排序顺序保存,这使得快速有效地访问分区内的数据,并支持群集密钥上的范围查询。
C *还允许数据字段不属于复合键,除非您在查询中创建二级索引,否则通常不会在查询中使用。
对于C *,“宽列”术语有点过时了。在当前的CQL视图中,数据被更传统地视为表中的行,这些行被分组为高效访问分区。
所以回答你的问题,是的,在C *中,通常将可能被认为是RDBMS中的数据列的列移动到C *中的复合键的一部分。
要查看有关分区键和群集列的详细信息,以及它们如何影响您可以执行的查询类型,请参阅a deep look at the CQL WHERE clause。
答案 1 :(得分:1)
复合键在HBase架构设计中非常流行。它们还允许您对Rowkey的前缀组件进行快速范围扫描。 与Cassandra不同,RowKey在存储数据时不会被分成几部分。
简单示例:http://riteshadval.blogspot.com/2012/03/hbase-composite-row-key-design-doing.html
在HBase中,在您的示例中,您将能够执行range scans with identifier only and with identifier+name also
。