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

Cassandra vs MongoDB-使用以前未知的密钥存储JSON数据?

喻昀
2023-03-14

我正在尝试集成一个非关系型数据库来存储JSON数据,而不是一个SQL数据库来存储JSON数据(存储JSON对象的列)。

对于MongoDB,我可以通过以下操作插入JSON文件:

document = <JSON OBJECT>
collection.insert(document)

但是,对于卡桑德拉,根据此网页:http://www.datastax.com/dev/blog/whats-new-in-cassandra-2-2-json-support

它不能是架构更少的,这意味着我需要事先创建一个表:

CREATE TABLE users (
    id text PRIMARY KEY,
    age int,
    state text
);

然后插入数据:

INSERT INTO users JSON '{"id": "user123", "age": 42, "state": "TX"}';

问题是我想尝试使用Cassandra,我刚刚完成了DataStax的教程,但似乎我需要事先知道JSON数据的密钥,这是不可能的。

或者,如果有一个未知的键,当有一个新的数据列时,我应该改变表吗?这听起来不像是一个非常好的设计决策。

任何人都可以为我指出正确的方向吗?谢谢

共有2个答案

李新霁
2023-03-14

CQL提供了创建和使用用户定义的数据类型的便利。您可以创建一个数据类型来处理多个字段。所以您可以简单地使用“创建类型”cql命令http://www.tutorialspoint.com/cassandra/cassandra_cql_user_defined_datatypes.htm

元望
2023-03-14

这种JSON支持非常具有误导性——它是Cql支持中的JSON,而不是存储中的JSON。

或者,如果有一个未知的键,当有一个新的数据列时,我应该改变表吗?这听起来不像是一个非常好的设计决策。

事实上,这不是一个好的决定——你在JSON中的字段可以在不同的实体中有不同的类型——一个列名不能满足所有的要求。此外,添加新字段需要在集群中传播模式,所以第一次插入(将包含更改表插入数据)会非常慢。

Cassandra没有给你任何内置的机制,但你可以做的是将整个JSON放在一个字段中,并在其他单独的列中公开所需的属性。例如:

CREATE TABLE users (
    id text PRIMARY KEY,
    json text, //in json age and state
    age int //explicit duplicated property - if you need e.g. index
);

顺便说一句。AFAIK卡桑德拉很久以前就曾经支持过你的案子,但现在它更“强类型化”了。

 类似资料:
  • 我正在尝试用动态字段键将json解组到json从storcli utility for linux返回的结构。一部分代码运行良好,但是如果json数据包含许多结构,我就不能解组它。我认为这是因为DriveDetailedInformation结构没有所有的json标签。有人能帮我吗?

  • 我们试图更好地保护API密钥(想想用来验证客户端到endpoint的令牌)。这将全部在我们的内部网络上,但我们仍然希望确定只有我们的移动客户端可以调用endpoint。 我想我们可以将API键放入Firebase远程配置参数中(在应用程序中内置一个无效的默认值)。但是,远程配置的Firebase文档说: 不要将机密数据存储在远程配置参数键或参数值中。可以解码存储在项目远程配置设置中的任何参数键或值

  • 问题内容: 我在将以下格式的json数据解组到结构时遇到麻烦。json的结构对我来说有点令人困惑,因此我为解组它所做的所有愚蠢的事情表示歉意。 我正在尝试使用以下结构将其解组。 这些字段在生成时将是未知的,并且会发生变化,并且存在此字段 在没有外部密钥的服务器名称之后,这再次让我感到困惑。我尝试了很多组合以了解如何将其解组,但是我失败了。 什么是使json字段解组为结构的有效方法? 问题答案: 您

  • 问题内容: 我正在使用KeyStore保护我的私钥,但是在以下行中: 被执行,我有这个异常: 我不明白问题出在哪里。 码: 谢谢您的帮助! 问题答案: 更改: 至 现在,您正在将方法中的context参数分配为与全局值相同的值,该值为null。因此,您的上下文实际上没有被存储。

  • 我必须连接到一个基于REST的WebService。 (https://someurl.com/api/lookup/jobfunction/lang/en) 在IE或chrome浏览器中,当我尝试访问这个URL时,我会得到一个证书,我必须信任它并接受它才能继续,然后我必须输入用户名和密码,然后我会得到JSON响应。 同样的事情,我必须为一个android应用程序编程。 > 尝试使用自定义Easy

  • 我正在构建一个全栈MERN(MongoDB Express React Nodejs)应用程序。我正在使用NPM包Google Maps React在我的网站上显示Google地图。我很难想出一个策略来保护我的前端google maps API密钥。 为了充分理解我的问题,查看下面的Google Maps React组件代码可能会有帮助 可能的解决办法 解决方案A 在我的Mongo数据库中存储密钥