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

标签 json mongodb cassandra

我正在尝试集成 NoSQL 数据库来存储 JSON 数据,而不是集成 SQL 数据库来存储 JSON 数据(存储 JSON 对象的列)。

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

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

但是,对于 Cassandra,根据此网页: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 数据的键,这是不可能的。

如果有未知键,我应该在有新数据列时更改表吗?这听起来不是一个很好的设计决策。

谁能指出我正确的方向?谢谢

最佳答案

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

Or should I alter the table when there is a new data column if there is an unknown key? That doesn't sound like a very good design decision.

确实,这不是一个好的决定 - 您在 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 Cassandra 很久以前就支持您的案例,但现在它更“强类型”。

关于json - Cassandra vs MongoDB - 使用以前未知的键存储 JSON 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32979220/

相关文章:

java - Azure VM 上的 Mongodb : Mongodb not reachable

database-design - 设计 Cassandra 数据模型的最佳实践是什么?

cassandra - 如何使用 cassandra-cli 或 Hector 设置列族的一致性级别

database - 将数据插入Atlas MongoDB出现错误: Insert not permitted while document contains errors

java - 如何通过Java在MongoDB中一次插入多个文档

docker - Janusgraph docker通过docker net连接到cassandra docker和elasticsearch docker,并将8182暴露给主机?

asp.net-mvc - 您如何处理对返回除 ViewResult 以外的结果的操作的授权?

javascript - jquery中如何向下滚动

javascript json 未捕获语法错误 : Unexpected number

javascript - 使用 angularjs 和 JSON 从数据库获取数据