Cassandra多列过滤

时间:2016-07-23 16:22:16

标签: database cassandra schema nosql

经过大量的搜索,我找不到关于"多对多"我希望过滤多个值的关系。

我将以游戏为例

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上查询所有项目及其所有组合,以仅返回我想要的项目,而不是交叉引用每个分发服务器,生产者和开发人员分区中的值。 / p>

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

2 个答案:

答案 0 :(得分:1)

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

建模数据的最佳方式是查询,所以可能是 - 您提到的更细粒度的方法可能是合适的(记住写入很便宜)。

另一个选择是根据分区键查看(kindof)位图索引。

您还可以查看二级索引 - 根据您的版本,您可以使用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方法。

希望有所帮助。

答案 1 :(得分:1)

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