Cassandra:用于管理标签的最具可扩展性的数据模型是什么?

时间:2014-11-20 09:33:11

标签: cassandra

我对Cassandra方式管理标签的最佳方法有点困惑:字符串字段?阵列场?二级指数?宽柱?甚至复合ids?

我目前认为数组字段+二级索引非常合适。 考虑到扩展能力的更好选择?

链接实现完全混淆^ _ ^:

添加数据本身 - 它与Stack Overflow标签非常相似:

  • 0-数据:每一行都是用HTML编写的简单文本(非常简单,没有应答器存储,没有1-n关系)加上其他基本信息(例如使用状态):它的大小很小(低于1k)
  • 1-有一个固定的类别列表(总共50个类别):所以每个标记都在一个类别区域内定义。
  • 2-然后有"用户定义"每行无限制标签,用于自动提示,按标签搜索,按标签列出,计数,整个按类别过滤
  • 按标签搜索可以使用随机多个标签:列出与一组标签匹配的所有行

我知道如何使用couchDB / Couchbase做到这一点,非常简单。到目前为止,Cassandra非常混乱,因为除非深入内部,否则我们永远不知道推荐的模型是什么。

注意,目前的CF就像:

CREATE TABLE items (
    id timeuuid,
    user_id uuid,
    name varchar,
    description text,
    tags set<text>,
    PRIMARY KEY (id)
);

由于

1 个答案:

答案 0 :(得分:1)

与Cassandra中的大多数内容一样,它实际上取决于您的查询和数据大小。一个标签的值是否超过一个或几百兆?在这种情况下,您需要在标签内进行存储。您是否尝试一起查找两个标签的值?在这种情况下,您可以使用多个标记创建标记。这是假设简单的文本标签。

使用庞大的数据集,只需拥有标签 - &gt;价值观可能不是一个好的选择。然后,您可能希望使用具有某种形式的局部敏感散列的潜在单独阶段来确定要考虑的桶。通常,Cassandra会很好地管理分区。但是,有许多标签,而不是非常大的值,可能值得LHS使用前缀/长度/前缀+后缀长度等来最小化标签的数量。

有许多不同的方法可以解决这个问题,但是它是否适合你的情景取决于......嗯......你的情景。如果您向我们提供您期望的查询和预期的标签/值数量,我们将能够提供更多帮助。