当前位置: 首页 > 知识库问答 >
问题:

在Cassandra中存储灵活模式

仲孙子辰
2023-03-14

我正在尝试设计一个新的应用程序,它使用Cassandra而不是传统的SQL数据库。集群和水平扩容功能对我的用例特别有用。

我有这样的情况,我有多个记录,它们可能彼此非常不同。例如,如果我存储不同的运动信息,对于足球,我会存储两支球队、球员、半场和全场比赛后的结果、红牌、黄牌等信息,而如果是网球比赛,则会存储两名对手、盘数等信息。

我不希望每个运动都有一个表(有负载),并且希望能够添加新的运动,而不必每次都修改数据库。我想保持它的灵活性,这个信息可以根据记录的运动类型任意改变。

在Cassandra中如何对这种信息进行建模是最好的?我知道它不是像MongoDB等面向“文档”的数据库。,但对于应用程序的其余部分,Cassandra提供的“类似表格”的结构是理想的。

我知道我可以将其作为JSON字符串存储在文本字段中,并在应用程序级别进行处理,但我担心这会限制将来对JSON字符串中的字段进行批量查询的需求(例如,所有匹配都有特定的裁判)。

我知道还有另一种方法可以将其存储为Map。然而,索引似乎有点有限,所有的例子都是基于map键,而不是基于值。有些人似乎也不鼓励在地图上使用索引。

我有什么选择?

共有1个答案

洪宇定
2023-03-14

我也有同样的问题。一个简单的小技巧:创建一个键列和一个值列。有时,您也可以将它与静态列一起使用。

比如:

    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)
    )

静态列在分区内是静态的。有时您不能使用静态列,因为否则分区会太大。(运动型可能太大)。然后不要使用静态列,但要在应用程序中小心使用这些列。

/e 为什么我用这个而不是地图?您也可以创建价值指数,但它只是一个二级索引。但如您所知,二级索引的性能不是最好的。使用此解决方案,您可以使用主索引的优势,但也可以获得地图的灵活性。

 类似资料:
  • 我是卡桑德拉的新手,在下面的维基百科中可以找到。 列族(CQL 3以来称为“表”)类似于RDBMS(关系数据库管理系统)中的表。列族包含行和列。每一行由行键唯一标识。每行都有多列,每列都有一个名称、值和时间戳。与RDBMS中的表不同,同一列族中的不同行不必共享同一列集,一列可以随时添加到一行或多行中 它说‘同一列族中的不同行不必共享同一列集',但如何实现呢?我几乎阅读了offical网站上的所有文

  • 我想将 JSON 存储在卡桑德拉数据库中。JSON 的每个字段都应映射到其各自的列。 可能吗?如果可能的话,我如何才能实现它?。 请帮帮我..

  • 我有一个无模式的json对象,我希望使用spring-cassandra将它存储在Cassandra DB中。我了解到卡珊德拉支持地图类型,但卡珊德拉不接受<代码>地图 我需要查询json的字段,因此将其存储为blob是不可能的。还有什么我能做到的吗? PS:我看过在CASSANDRA中存储JSON对象,答案似乎不适用于我的用例,因为我的json可能非常复杂。

  • 我是Cassandra的新手,我想在Cassandra中存储加权图的时间序列,其中边权值随时间而增加,但也随时间而更新。例如, 我的第一个镜头涉及两个CQL v3表: 这个策略有什么可怕的低效吗?应该怎么做?我已经知道表2的更新过程不是幂等的,可能会导致不一致,但我暂时可以接受这一点。 edit:我可以做的一件事是将这两个表合并到一个时间序列表中。

  • 我有以下对象需要存储在Cassandra中。我需要使用UDT还是有其他方法来存储对象。我需要最终使用存储库方法从spry-boot应用程序存储它。

  • 问题内容: 我现在两次遇到问题,生产者线程会产生N个工作项,将它们提交给an ,然后需要等待,直到所有N个项都已处理完毕。 注意事项 N事先未知 。如果是这样,我将简单地创建一个然后具有生产者线程,直到完成所有工作。 使用a 是不合适的,因为尽管我的生产者线程需要阻塞(即,通过调用),但 无法表示所有工作都已完成 ,从而导致生产者线程停止等待。 我当前喜欢的解决方案是使用整数计数器,并在提交工作项