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"
... ... ...
在应用程序层,构建组合主键以允许在同一行上快速迭代是正确的吗。
这可以表示为如下。
*******| 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
.
2条答案
按热度按时间tp5buhyn1#
在设计cassandra模式时,一直使用复合键。
在c中,键被分解为两部分,分区键和集群列。
分区键用于将数据散列到集群内的节点。分区是一个数据桶,它可以基于集群列保存一行或多行数据。分区内的数据对于节点来说是局部的,并且由聚类键按顺序进行排序,这使得访问分区内的数据既快速又高效,并且支持对聚类键的范围查询。
c还允许不属于复合键的数据字段,并且通常不在查询中使用,除非在这些字段上创建辅助索引。
“宽列”术语对于c来说有点过时。在当前的cql视图中,数据在更传统的术语中被认为是表中的行,这些行被分组成高效的分区来访问。
所以要回答您的问题,在c中是的,将rdbms中可能被认为是数据列的列移动到c*中复合键的一部分是很常见的。
要查看有关分区键和集群列的更多信息,以及它们如何影响您可以执行的查询类型,请深入查看cql where子句。
goqiplq22#
复合键在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
.