我正在使用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中的“无价值专栏”理念?无价值列技术的任何好/更好的例子?我的想法甚至是使用无价值列技术的正确方法吗?
先谢谢你们。
答案 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
。因此,在您的前端,您可以快速显示分类视图,因为您知道arstechnicia
和stackoverflow
属于technology
组,这是一个rowKey。插入数据时,它会增加一些额外的工作。
我使用的是Cassandra 0.6.x,遗憾的是我无法说出Cassandra 0.7.0+支持的二级索引。但据推测,你可以通过在主要CF中添加一个名为category
的列来实现上述解释,其中索引由ArticleBackLink
保留,并且仅使用CQL select... where...
进行查询。
您可能会考虑二级索引,这可能会消除对新索引CF的需求。你可能想看看这些:
问:创建二级索引与手动创建“索引”CF之间是否存在差异,例如“users_by_country”?
A:是的。首先,在创建自己的索引时,节点可以索引另一个节点持有的数据。其次,对索引和数据的更新不是原子的。