我是一个NoSQL趋势的新手,我需要开始在一个新的JAVA项目中使用它,我正在致力于存储来自Facebook和\或其他社交网络的用户数据,以便进行一些分析,并从我的产品中为他们提供更好的结果。
我想使用NoSQL over RDBMS的原因是,各种API以JSON的形式返回数据,对我来说,这是一种非结构化数据,我只需要持久化它以供分析系统稍后使用。您可以将我的阅读器看作一个虚拟层,它只执行特定的API并存储响应。
例如,我有以下响应:
{
"oauth_token": "<ACCESS_TOKEN>",
"expires": <EXPIRATION_TIME>,
"name": "..."
"gender": "...",
"birthday": "...",
"email": "...",
<MORE FIELDS>
}
我正在努力思考这些解决方案(Cassandra,MongoDB)中是否有任何解决方案可以提供帮助。它试图“格式化”响应并将每个JSON键存储为一个列,这与使用RDBMS列启用搜索字段非常相似。
但我觉得我遗漏了一些东西。是否可以将其存储为"key-value“
例如:"user-id“->上述响应
并进行查询以在JSON响应中进行搜索。
我将感谢你的帮助,也许你也可以给我参考,以更好地理解数据技术。
诚挚的问候。
发布于 2014-09-11 20:11:36
您可以使用MongoDB或Cassandra来存储您的响应,并在oauth_token或some_id等高carnality上创建索引,以支持更快的查询。NoSQL与关系型数据库完全不同,它以类似于JSON的方式存储数据,不像关系型数据库那样支持模式。
假设MongoDB集合data (您可以在关系数据库中将集合与表关联)包含以下文档-
{
"oauth_token": "<ACCESS_TOKEN>",
"expires": <EXPIRATION_TIME>,
"name": "..."
"gender": "...",
"birthday": "...",
"email": "...",
}
执行以下代码在key oauth_token (假设)上创建索引-
db.data.ensureIndex({oauth_token:1})
执行以下代码以查看索引详细信息-
db.data.getIndexes()
执行以下查询以使用oauth_token获取记录-
db.data.find({oauth_token: <OAUTH_TOKEN>})
有关更多详细信息,请参阅MongoDB文档-
发布于 2014-09-11 20:39:04
如果您的需求是将带有值的键存储为json,那么MongoDB更适合此场景,因为在默认情况下,MongoDB以BSON(这是JSON +其他数据类型)存储数据。此外,您可以使用其类似Javascript的查询语言来动态查询复杂的json。如果你使用Cassandra,你需要映射json=>columns,这是开销。此外,Cassandra没有广泛的MongoDB查询功能。
https://stackoverflow.com/questions/25785829
复制相似问题