【问题标题】:using Cassandra or MongoDB to store complex JSON structures and enable search使用 Cassandra 或 MongoDB 存储复杂的 JSON 结构并启用搜索
【发布时间】:2014-09-11 20:39:03
【问题描述】:

我是 NoSQL 趋势的新手,我需要在一个新的 JAVA 项目中开始使用它,我正在致力于存储来自 Facebook 和\或其他社交网络的用户数据,以进行一些分析并为他们提供更好的我的产品的结果。

我想在 RDBMS 上使用 NoSQL 的原因是各种 API 以 JSON 的形式返回数据,这对我来说是一个非结构化数据,我只需要将它保存起来供分析系统以后使用。你可以把我的阅读器想象成一个虚拟层,它只执行特定的 API 并存储响应。

例如我有以下响应:

{
   "oauth_token": "<ACCESS_TOKEN>",
   "expires": <EXPIRATION_TIME>,
   "name": "..."
   "gender": "...",
   "birthday": "...",
   "email": "...",
   <MORE FIELDS>
}

我正在尝试思考这些解决方案(Cassandra、MongoDB)是否可以提供帮助。我尝试“格式化”响应并将每个 JSON 键存储为列,这与使用 RDBMS 列启用搜索字段非常相似。

但我觉得我在这里遗漏了一些东西......是否可以存储为“键值”

例如: “用户 ID”-> [上述响应]

并进行查询以在 JSON 响应中进行搜索。

感谢您的帮助,也许您也可以给我一些参考资料,以更好地理解数据技术。

最好的问候。

【问题讨论】:

    标签: json mongodb


    【解决方案1】:

    您可以使用 MongoDB 或 Cassandra 来存储您的响应并创建像 oauth_tokensome_id 这样的高强度索引以支持更快的查询。 NoSQL 与 RDBMS 完全不同,它将数据存储在类似于 JSON 的键值对中,并且不支持像 RDBMS 这样的模式。

    假设 MongoDB 集合 data(您可以将集合与 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. http://docs.mongodb.org/manual/tutorial/query-documents/
    2. http://docs.mongodb.org/manual/tutorial/insert-documents/
    3. http://docs.mongodb.org/manual/tutorial/create-an-index/

    【讨论】:

    • 您好,感谢您的快速回复。我实际上考虑使用 Cassandra 作为要求。我只是想知道如何将它解析到数据库中。假设我插入 key=[user_id] 和 value=[the json from the response] 那么内部 JSON 字段实际上不是 cassandra 的“列”,而是 1 个特定列的值。我错了吗?你会怎么做?您会解析响应并将 JSON 响应中的每个键添加为列吗?
    【解决方案2】:

    如果您的要求是将键值存储为 json,那么 MongoDB 更适合这种情况,因为默认情况下,MongoDB 将数据存储在 BSON(即 JSON + 其他数据类型)中。此外,您可以使用类似 Javascript 的查询语言动态查询复杂的 json。如果您使用 Cassandra,则需要映射 json=>columns,这是开销。此外,Cassandra 不具备 MongoDB 的广泛查询能力。

    【讨论】:

    • 嗨,谢谢。我实际上想知道是否真的存在将来自 Facebook API 的 JSON 响应替换为使用 MongoDB 似乎更自然的地图的开销。感谢您清除它。我听说有人声称在 mongodb 上使用 couchbase 会更好——你有这方面的经验吗?
    • 我愿意,NoSQL DB 存在大量问题。了解哪个 NoSQL DB 可以最大程度地满足您的要求非常重要。在您的特定情况下,MongoDB 应该是一个足够好的选择(Couchbase 在大多数方面都类似于 MongoDB,除了它支持 Master-Master 配置,这在您的情况下不是标准)。如果您觉得它有用,请接受答案,以便其他人参考。
    • 谢谢 :) 我一定会检查 MongoDB 是否满足我的需求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    相关资源
    最近更新 更多