经过大量的搜索,我找不到关于"多对多"我希望过滤多个值的关系。
我将以游戏为例
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>
这是推荐的,还是有更好的方法来处理这种特定的情况?
答案 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。