当前位置:  开发笔记 > 前端 > 正文

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

如何解决《CassandravsMongoDB-使用以前未知的密钥存储JSON数据?》经验,为你挑选了1个好方法。

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

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

document = 
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数据的键,这是不可能的.

或者,如果存在未知密钥,是否应该在有新数据列时更改表格?这听起来不是一个非常好的设计决定.

有人能指出我正确的方向吗?谢谢



1> piotrwest..:

这种JSON支持非常误导 - 它是Cql支持的JSON,而不是存储.

或者,如果存在未知密钥,是否应该在有新数据列时更改表格?这听起来不是一个非常好的设计决定.

确实,这不是一个好的决定 - 您在JSON中的字段可以跨实体使用不同的类型 - 一个列名称无法满足所有要求.此外,添加新字段需要跨群集进行架构传播,因此第一个插入(包含alter table + insert数据)将非常慢.

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

BTW.很久以前AFAIK Cassandra曾经支持你的案子,但现在它更"强烈打字".

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有