【问题标题】:data modelling in cassandra to optimize search resultscassandra 中的数据建模以优化搜索结果
【发布时间】:2014-07-27 03:31:51
【问题描述】:

我只是想知道是否可以找到一些线索/指针来解决我们这种简单的数据建模问题。 如果有人能在正确的方向上帮助我,那就太好了。

所以我们有一种平桌前。文档 它有各种元数据附加到一个文档,比如 UUID 文档 ID, 字符串组织 ID, 整数总页数, 字符串文档类型, 字符串帐号, 字符串分支号, 双倍金额, 等等等等……

我们存储在 cassandra 中。 UUID 是行键,我们有某些二级索引,例如组织 ID。

这个表实际上假设包含数百万条记录。 放置适当的索引有助于处理很多查询,但对于通用查询我被卡住了。 如果我输入类似的查询,即使有 10 万条记录,问题也是如此 select * from document where orgId='something' and amount > 5 and amount

上述问题可以通过适当放置某些 parmas 来解决,但我们需要根据其中几十个列进行搜索。

我仍在尝试水平缩放它,以便将多条记录放在一行中。

希望有方向感。

【问题讨论】:

    标签: cassandra data-modeling


    【解决方案1】:

    这是一个广泛的问题,很难给出通用的解决方案。但是,这是我的 2 便士:

    您希望查询命中单个分区以进行快速查询。如果您没有在查询中点击行键,则这是一个集群范围的操作。所以 select * from docs where orgId='something' and amount > 5 and amount

    同样,您不希望所有文档都放在一个分区中...这是一个明显的热点,更不用说它会导致大小问题 - 在 100mb 标记附近保持一行是个好主意。每行几千甚至几十万元数据条目应该没问题 - 尽管这在很大程度上取决于您的特定数据。

    所以我们既要命中分区键,又要利用分布,同时保持效率。嗯.....

    您可以创建人工水桶。根据预期的数据量确定需要多少个存储桶。假设每个分区有几十万,n 个桶给你 n * 几十万。使存储桶 id 成为行键。查询时,使用类似:

    select * from documents where bucketid in (...) and orgId='something' and amount > 5;

    [注意:为此,您可能希望将 docid 作为最后一个聚类键,因此在进行范围查询时不必指定它。]

    这将导致 n 个快速查询命中 n 个分区,其中 n 是存储桶的数量。

    另外,请考虑限制您的结果。您真的一次需要 2000 条记录吗?

    对于某些信息,使用单独的表可能是有意义的(即,在一个表中具有一种特定聚类方案的某些信息,而在另一个表中具有另一种)。某些信息的重复通常是可以的 - 但同样,这取决于特定的场景。

    同样,很难给出一个笼统的答案。但这有帮助吗?

    【讨论】:

    • 感谢 Asic。我也在考虑相同的方向,但感谢您确认这一点。唯一的问题是我很难找到存储桶 ID,因为查询可能非常临时。
    • 这只是一种方法。在这种情况下,您决定为特定类型的数据设置 n 个存储桶。为了查询该类型的数据,您将使用该类型的所有存储桶。这让您可以在执行多个分区的同时击中分区。您可以获得 n 的预期上限(例如 3 - 4)并查询大量数据。我们在这里谈论 4 个完整的分区。它确实需要一些计划,但除了数量惊人的数据外,它应该不会太难(排队“这就是他所说的”笑话!)。
    【解决方案2】:

    问题不在于 Cassandra,而在于您的数据模型。你需要从关系思维转变为 nosql-cassandra 思维。在 Cassandra 中,如果您想获得不错的 O(1) 速度,则首先编写查询。在 Cassandra 中使用二级索引坦率地说是一个糟糕的选择。这是因为您的索引是分布式的

    如果您事先不了解您的查询,请使用其他技术,但不要使用 Cassandra。关系服务器真的很好,如果你可以在一台服务器上放置所有数据,否则看看ElasticSearch

    其他选项是使用 Datastax 版本,其中包含用于全文搜索的 Solr。

    最后,您可以有多个重复信息的表。这将允许您查询特定属性。这个过程称为反规范化,其想法是您获取对象的属性,使其成为主键并将其插入到自己的表中。结果是您可以在 O(1) 时间内查询该特定表以获取该特定属性值。缺点是您现在必须复制数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-12
      • 1970-01-01
      • 2020-05-30
      • 2013-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多