Cassandra中的无值列技术 - 数据库模式

时间:2011-08-01 16:05:16

标签: hyperlink cassandra database-schema schema-design

我正在使用Cassandra 0.8.2

我正在尝试使用“无价值列”技术来设置我的cassandra架构。无价值专栏背后的想法如下:您的专栏名称成为相关信息& “名称/值”对的值为空。这用于更快地进行查询 - 非规范化的一个示例。我希望列的名称是反向链接的URL。行键是后向链接的目标URL的UUID。这甚至是一个好主意/架构设计吗?

我正在使用一个非常基本的例子来解决我的问题。这是我使用Cassandra-Cli设置的内容:

create column family ArticleBackLinks 
with comparator = UTF8Type
and key_validation_class = UTF8Type
and default_validation_class = UTF8Type
and column_metadata = 
[
{column_name: www.arstechnica.com, validation_class: UTF8Type},        
{column_name: www.apple.com, validation_class:UTF8Type},         
{column_name: www.cnn.com, validation_class: UTF8Type},      
{column_name: www.stackoverflow.com, validation_class: UTF8Type}, 
{column_name: www.reddit.com, validation_class: UTF8Type}
];

我收到错误:

Command not found: `create column family ArticleBackLink...

我认为我的错误是由于我在column_name中使用的时间段。简而言之,我想知道你们中的一些人是否有更好的方法来使用Cassandra中的“无价值专栏”理念?无价值列技术的任何好/更好的例子?我的想法甚至是使用无价值列技术的正确方法吗?

先谢谢你们。

1 个答案:

答案 0 :(得分:2)

我认为Cassandra不喜欢dot中的column_name,以下作品

[default@stackoverflow] create column family ArticleBackLinks with
...     comparator = UTF8Type and
...     default_validation_class = UTF8Type and
...     column_metadata =
...     [
...     {column_name: 'www.arstechnica.com', validation_class: UTF8Type},
...     {column_name: 'www.apple.com', validation_class:UTF8Type},
...     {column_name: 'www.cnn.com', validation_class: UTF8Type},
...     {column_name: 'www.stackoverflow.com', validation_class: UTF8Type},
...     {column_name: 'www.reddit.com', validation_class: UTF8Type}
...     ];
881b31f0-bc64-11e0-0000-242d50cf1ff7
Waiting for schema agreement...
... schemas agree across the cluster

顺便说一句,既然您使用的是Cassandra 0.8.2,那么您应该利用CQL

所以,这样的陈述将来会有所帮助

UPDATE <COLUMN FAMILY> [USING <CONSISTENCY> 
[AND TIMESTAMP <timestamp>] [AND TTL <timeToLive>]] 
SET name1 = value1, name2 = value2 WHERE <KEY> = keyname;

参考this


已更新: 在评论中添加了更多想法

将分组信息保存在一个地方是个好主意。它增加了Cassandra提供的效率。

例如,您的案例可以category为RowKey,网址为column_name。因此,在您的前端,您可以快速显示分类视图,因为您知道arstechniciastackoverflow属于technology组,这是一个rowKey。插入数据时,它会增加一些额外的工作。

我使用的是Cassandra 0.6.x,遗憾的是我无法说出Cassandra 0.7.0+支持的二级索引。但据推测,你可以通过在主要CF中添加一个名为category的列来实现上述解释,其中索引由ArticleBackLink保留,并且仅使用CQL select... where...进行查询。

您可能会考虑二级索引,这可能会消除对新索引CF的需求。你可能想看看这些:

  • Secondary Index in Cassandra 0.7
  • Cassandra Wiki FAQ

      

    问:创建二级索引与手动创建“索引”CF之间是否存在差异,例如“users_by_country”?

         

    A:是的。首先,在创建自己的索引时,节点可以索引另一个节点持有的数据。其次,对索引和数据的更新不是原子的。

  •