我是NoSQL趋势的新手,我需要开始在一个新的JAVA项目中使用它,我正在努力存储我的用户'来自Facebook和/或其他社交网络的数据进行分析并为我们的产品提供更好的结果。
我想使用NoSQL而不是RDBMS的原因是各种API以JSON的形式返回数据,这对我来说是非结构化数据,我只需要将其保留以供分析系统以后使用。您可以将我的读者视为仅执行特定API并存储响应的虚拟层。
例如,我有以下回应:
{
"oauth_token": "<ACCESS_TOKEN>",
"expires": <EXPIRATION_TIME>,
"name": "..."
"gender": "...",
"birthday": "...",
"email": "...",
<MORE FIELDS>
}
我正在考虑是否有任何解决方案(Cassandra,MongoDB)可以提供帮助。我试着&#34;格式化#34;响应并将每个JSON密钥存储为列,这与使用RDBMS列启用搜索bu字段非常相似。
但我觉得我在这里遗漏了一些东西......是否可以存储为&#34;键值&#34;
例如: &#34;用户ID&#34; - &GT; [上述回应]
并进行查询以在JSON响应中进行搜索。
我将非常感谢您的帮助,也许您也可以参考我们更好地理解数据技术。
最诚挚的问候。
答案 0 :(得分:0)
您可以使用MongoDB或Cassandra存储您的响应,并在高强度上创建索引,例如 oauth_token 或 some_id ,以支持更快的查询。 NoSQL与RDBMS完全不同,它将数据存储在键值对中,与JSON类似,并且不支持RDBMS等模式。
假设MongoDB集合数据(您可以将集合与RDBMS中的表关联起来)包含以下文档 -
{
"oauth_token": "<ACCESS_TOKEN>",
"expires": <EXPIRATION_TIME>,
"name": "..."
"gender": "...",
"birthday": "...",
"email": "...",
}
执行以下代码以在密钥 oauth_token 上创建索引(假设) -
db.data.ensureIndex({oauth_token:1})
执行以下代码以查看索引详细信息 -
db.data.getIndexes()
执行以下查询以使用 oauth_token 获取记录 -
db.data.find({oauth_token: <OAUTH_TOKEN>})
您可以参考MongoDB文档以获取更多详细信息 -
答案 1 :(得分:0)
如果你的要求是存储一个值为json的键,那么MongoDB更适合这种情况,因为默认情况下MongoDB将数据存储在BSON中(这是JSON +其他数据类型)。此外,您可以使用类似Javascript的查询语言动态查询复杂的json。如果你使用Cassandra,你需要映射开销的json =&gt;列。此外,Cassandra没有MongoDB的广泛查询功能。