1

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

4

2 回答 2

1

在设计 Cassandra 模式时,一直使用复合键。

在 C* 中,键分为两部分,分区键和集群列。

分区键用于将数据散列到集群内的节点。分区是一个数据桶,可以根据集群列保存单行或多行。分区内的数据对节点来说是本地的,并由集群键按排序顺序保存,这使得访问分区内的数据快速高效,并支持对集群键的范围查询。

C* 还允许不属于复合键的数据字段,并且通常不会在查询中使用,除非您在它们上创建二级索引。

“宽列”术语对于 C* 来说有点过时了。在当前的 CQL 事物视图中,数据在更传统的术语中被认为是表中的行,这些行被分组为高效访问分区。

因此,要回答您的问题,是的,在 C* 中,通常会将可能被认为是 RDBMS 中的数据列的列移动为 C* 中复合键的一部分。

要查看有关分区键和集群列的更多信息,以及它们如何影响您可以执行的查询类型,请参阅深入了解 CQL WHERE 子句

于 2015-09-11T18:34:49.043 回答
1

复合键在 HBase 模式设计中非常流行。它们还允许您对 Rowkey 的前缀组件进行快速范围扫描。与 Cassandra 不同的是,RowKey 在存储数据时不会被分解为 Parts。

简单示例:http ://riteshadval.blogspot.com/2012/03/hbase-composite-row-key-design-doing.html

在 HBase 中,在您的示例中,您将能够执行range scans with identifier only and with identifier+name also.

于 2015-09-12T05:41:08.220 回答