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

在Cassandra中存储无模式的复杂json对象

施景同
2023-03-14

我有一个无模式的json对象,我希望使用spring-cassandra将它存储在Cassandra DB中。我了解到卡珊德拉支持地图类型,但卡珊德拉不接受<代码>地图

我需要查询json的字段,因此将其存储为blob是不可能的。还有什么我能做到的吗?

PS:我看过在CASSANDRA中存储JSON对象,答案似乎不适用于我的用例,因为我的json可能非常复杂。

共有2个答案

邹锦
2023-03-14

1) 我的一个解决方案是,首先集成solr搜索并索引该表。

2)稍后编写一个solr分析器来解析json,并在索引时放在solr中的各种字段下。

3) 下一步是使用solr支持的查询,如select*from table,其中solr_query=“{search expression syntax}”

楚知
2023-03-14

你看了UDT(用户定义类型)吗?

您可以像这样定义UDT:

CREATE TYPE my_json(
   property1 text,
   property2 int,
   property3 map<text, text>,
   property4 map<int, another_json_type>,
   ...
)

然后在Java使用Map

注意:<code>UserType</code>来自Java驱动程序:https://github.com/datastax/java-driver/blob/2.1/driver-core/src/main/java/com/datastax/driver/core/UserType.java

您无法创建用户类型 n Java,只能从表的元数据中获取它,请参阅:https://github.com/datastax/java-driver/blob/3.0/driver-core/src/test/java/com/datastax/driver/core/UserTypesTest.java#L62-L81

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

  • 我正在尝试设计一个新的应用程序,它使用Cassandra而不是传统的SQL数据库。集群和水平扩容功能对我的用例特别有用。 我有这样的情况,我有多个记录,它们可能彼此非常不同。例如,如果我存储不同的运动信息,对于足球,我会存储两支球队、球员、半场和全场比赛后的结果、红牌、黄牌等信息,而如果是网球比赛,则会存储两名对手、盘数等信息。 我不希望每个运动都有一个表(有负载),并且希望能够添加新的运动,而不

  • 问题内容: hmset函数可以设置每个字段的值,但是我发现,如果值本身是一个复杂的结构化对象,则从hget返回的值是一个序列化的字符串,而不是原始对象 例如 i的类型是字符串,而不是python对象,除了手动解析每个字段外,还有什么方法可以解决此问题? 问题答案: 您无法在Redis中创建嵌套结构,这意味着您无法(例如)在本地Redis哈希图中存储本地Redis列表。 如果确实需要嵌套结构,则可能

  • 问题内容: 由于我是Redis的新手,因此我需要一些有关如何在REDIS中存储以下复杂json的指导,以便我们可以从REDIS中访问JSON的元素- 我需要以一种查询IP /主机名/ InstanceID的方式来存储它,以获取JSON中存在的所有元素。 我需要上述指导。 问题答案: 您无法直接做到这一点,但是幸运的是,有一个名为ReJSON的新Redis模块可以完全满足您的需求,并且它还具有不错的

  • 我正在尝试验证具有可选键的复杂JSON 下面是完整的可执行特性文件 我想验证ValidJsonSchema,但无法绕过完整的模式匹配 当我尝试匹配可选字段时,我一直得到错误为 com.intuit.karate.exception.karateException:应在路径$中找到属性为[“MyArray”]的对象,但发现了“net.minidev.json.JsonArray”。根据JSONPro

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