我正在尝试设计一个使用Cassandra而不是传统SQL数据库的新应用程序。聚类和水平缩放功能对我的用例特别有用。
我有这种情况,我有多个记录可能彼此完全不同。例如,如果我存储不同的运动信息,对于足球,我会存储像两支球队,球员,半场和全时的结果,红牌,黄牌等等,而如果是网球比赛则会有比如两个对手,套数等等。
我不希望每个运动都有一张桌子(有负载),并希望能够添加新的运动,而无需每次都修改数据库。我想保持灵活性,这些信息可以根据记录的体育类型随意改变。
如何在Cassandra中对此类信息进行建模?我知道这不是一个'文件'面向数据库,如MongoDB等,但对于应用程序的其余部分,表格类似于'结构Cassandra提供的是理想的。
我知道我可以将它作为JSON字符串存储在文本字段中并在应用程序级别处理它,但我担心这会限制将来批量查询JSON字符串中的字段的所有要求(例如所有匹配有一个特定的裁判)。
我知道还有另一种方法可以将它存储为地图。但是,索引似乎有点受限,所有示例我似乎都根据map键找到索引,而不是值。有些人似乎也不鼓励在地图上使用索引。
我有哪些选择?
答案 0 :(得分:0)
我有同样的问题。简单的一个简单技巧:您为键创建一列,为该值创建一列。有时您也可以使用静态列。
像:
CREATE TABLE gameOverview (
sportType text, sportPropertyIndex1 text static, sportPropertyIndex2 text static, sportPropertyIndex3 text static,
sportPropertyValue1 text, sportPropertyValue2 text, sportPropertyValue3 text,
PRIMARY KEY(sportType, sportPropertyValue1, sportPropertyValue2, sportPropertyValue3)
)
静态列在分区中是静态的。有时你不能使用静态列,因为分区太大了。 (sporttype可能太大了)。然后不要使用静态列,但要小心应用程序中的这些列。
/ e为什么我用这个代替地图?您也可以创建值索引,但它只是一个二级索引。但正如你所知,二级指数的表现并不是最好的。使用此解决方案,您可以使用主索引的优势,但您还可以灵活地使用地图。