【问题标题】:Cassandra multi-column FilteringCassandra 多列过滤
【发布时间】:2017-08-27 09:44:44
【问题描述】:

经过大量搜索,我找不到关于“多对多”关系的良好文档,我想在其上过滤多个值。

我将以游戏为例

Games have 1 to many Distributors
Games have 1 to many Producers
Games have 1 to many Developers

我的目标是找到所有对发行商、制作人或开发商有过滤器的游戏。

现在从研究中,我可以使用“in”运算符,尽管我已经读过这不是推荐的做法,因为一个节点可以访问多个节点,而不是服务器直接直接访问这些节点。 (如果我错了,请纠正我)

现在我的问题是,我应该对数据进行多细化?

我只是需要这个,然后在本地交叉引用结果吗?

GamesByDistributor
GamesByProducer
GamesByDeveloper

或者我应该像这样更细化:

GamesByDistributorANDProducer
GamesByDistributorANDDeveloper
GamesByDeveloperANDProducer
GamesByDeveloperProducerANDDistributor

细化选项将允许我对所有项目及其所有组合进行查询 1 以仅返回我想要的项目,而不是交叉引用来自每个分发者、生产者和开发者分区的值。

这是推荐的,还是有更好的方法来处理这种特定情况?

【问题讨论】:

    标签: database cassandra schema nosql


    【解决方案1】:

    您可以通过各种集合数据类型进行一对多的建模(对数量有一些限制)。你试过吗?

    对数据建模的最佳方法是通过查询,因此,可能是的 - 您提到的更精细的方法可能是合适的(记住写入成本很低)。

    另一种选择是查看基于分区键的(种类)位图索引。

    您还可以查看二级索引 - 根据您的版本,您可以使用 SASI 索引 (https://issues.apache.org/jira/browse/CASSANDRA/component/12328927/?selectedTab=com.atlassian.jira.jira-projects-plugin:component-summary-panel),甚至可以通过 https://github.com/Stratio/cassandra-lucene-index 或 DataStax Enterprise Search 使用 lucene 方法。

    希望对您有所帮助。

    【讨论】:

    • 我曾考虑过集合,但我想避免使用“in”子句,因为我对未来限制和单点故障的可能性感到不安。我将研究位图,虽然我不确定它们在我的特定情况下如何应用,但它们的键必须相当大。 SASI 索引是否解决了这个问题:lostechies.com/ryansvihla/2014/09/22/…,因为我希望能够说“开发人员在哪里('Nintendo','Sega')”等等。
    【解决方案2】:

    您可能需要为您的数据模型考虑 DSE Graph 或 Open Source Titan。

    【讨论】:

    • 我只是查看了图形数据库,因为我并不真正了解它们(直到我刚刚研究过它。)所以如果我走图形路线,这是否意味着我将始终使用图形查询语言它会是一个完整的替代品,还是当图形性能不佳时我想使用 CQL?人们通常如何决定何时使用 CQL 以及何时使用图形查询语言?例子会很棒!
    猜你喜欢
    • 1970-01-01
    • 2019-06-29
    • 2012-08-05
    • 1970-01-01
    • 2017-07-23
    • 1970-01-01
    • 2019-01-13
    • 2013-11-24
    • 2011-03-20
    相关资源
    最近更新 更多