使用宽列存储构建复合主键是正确的模式吗?

lyfkaqu1  于 2021-06-09  发布在  Hbase
关注(0)|答案(2)|浏览(360)

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 列已从 ValueKey 以及 Value 只有一个列名 value .

tp5buhyn

tp5buhyn1#

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

goqiplq2

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 .

相关问题