1

我正在使用 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 中的“无价值列”的想法?无价值列技术的任何好的/更好的例子?我的想法甚至是使用无价值列技术的正确方法吗?

提前谢谢各位。

4

1 回答 1

2

我认为 Cassandra 不喜欢dotin 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;

参考这个


更新: 根据评论添加更多想法

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

例如,您的案例可以有categoryas RowKey 和 urls column_name。因此,在您的前端,您可以快速显示分类视图,因为您知道这一点arstechnicia并且stackoverflow属于technologyrowKey 组。当您插入数据时,它会增加一点额外的工作。

我使用 Cassandra 0.6.x,所以很遗憾我不能告诉很多关于 Cassandra 0.7.0+ 支持的二级索引。但据推测,您可以通过在主 CF 中添加一列来实现上述说明,该列category的索引由 CQL 持有ArticleBackLink并仅使用 CQL 进行查询select... where...

您可能会查看二级索引,它可能不需要拥有一个新的“索引 CF”。你可能想看看这些:

  • Cassandra 0.7 中的二级索引
  • Cassandra 维基常见问题解答

    问:创建二级索引与手动创建“索引”CF(例如“users_by_country”)有区别吗?

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

于 2011-08-01T17:35:39.303 回答