【问题标题】:Which is the suitable database for storing a large JSON? [closed]哪个数据库适合存储大型 JSON? [关闭]
【发布时间】:2019-02-09 10:40:45
【问题描述】:

只有一个大的 JSON 文件。例如,

{   
    "Name": "Motor_M23",
    "AASID": {
        "IDType": "URI",
        "IDSpec": "http://acplt.org/AAS/Motor_M23"
    },
    "AssetID": {
        "IDType": "URI",
        "IDSpec": "http://acplt.org/Assets/Motor_M23"
    },
    "Header": {
        "PropertyValueStatementContainers": [
            {
                "Name": "Config",
                        .
                        .
                        .
                        .

我需要支持以下操作:

  1. 查询一个元素应该返回所有子元素,例如查询AssetID 应该返回

    "AssetID": {
        "IDType": "URI",
        "IDSpec": "http://acplt.org/Assets/Motor_M23"
    }
    
  2. 更新元素的值。

  3. 删除元素。
  4. 在层级之间移动元素,例如使AssetID 成为AASID 的子元素。

我考虑了以下方法:

  1. 图形数据库:我开始阅读有关 Neo4J 的信息。但是,它不能智能地从 JSON 中创建图形。必须指定节点类型及其层次顺序。
  2. ElasticSearch :它可以通过将 JSON 视为文本来工作,因此不是有效的解决方案。
  3. Postgres:支持查询 JSON 对象,但更新、删除效率不高。

有没有什么好的数据库可以从大型 JSON 中加载数据并处理我的操作?

【问题讨论】:

  • 面向文档的 nosql 数据库。结帐MongoDB,它是最受欢迎的之一,并且有很多很好的文档。
  • @Noki 我检查了带有嵌套集的模型树。 MongoDB 是否仅通过提供 JSON 来支持 自动 创建树?我找不到任何方法来做到这一点。
  • 我将 mongoDB 与 java 应用程序一起使用,该应用程序使用提供自动创建的 ODM。我真的不知道您是否可以自动执行此操作,但我很确定那里有脚本可以为您执行此操作。

标签: json database storing-information


【解决方案1】:

如果您只使用 JSON,那么您真的应该使用 document oriented database,因为它可以让您免于处理与 sql 相关的问题。

MongoDB是个不错的选择,支持many drivers并且可以处理tree structures(虽然我不确定自动创建)

CRUD 操作简单,覆盖范围广。

对于繁忙服务器上的非常大的数据集,您应该使用XFS 文件系统和WiredTiger 存储引擎,因为在性能上有一些提升。

它得到了很好的支持,而且学习曲线并不多。 (我是从纯 SQL 来的,没有太多麻烦)

您还可以选择MariaDBMySQL,尽管我都没有这方面的经验,但它们都支持 JSON,而对于 MySQL,我觉得这只是一个必须添加的“螺栓”面对即将到来的需求。

【讨论】:

    【解决方案2】:

    这是选择正确数据库的典型架构问题,其中您必须考虑很多重要方面,例如 HA、弹性、复制、分片、工具支持、成熟度、许可、备份和恢复等。

    MongoDB 和 Couchbase DB 是两个最流行和广泛使用的文档数据库。选择一个没有直接的答案,因为您必须进行权衡分析。我可以分享我的两分钱,希望这能帮助您做出正确的决定。

    可以考虑 MongoDB 或 Couchbase NoSQL 文档数据库,因为 json 是两者中的一等公民,您可以使用字段执行操作。

    1. MongoDB(CAP 之外的 CP 支持)更喜欢一致性而不是可用性,而 couchbase(CAP 之外的 AP)是高可用性数据库。
    2. MongoDB 集群使用主/从架构,而 couchbase 集群使用点对点分布架构。

    还有更多维度需要考虑,以下链接将带您走向正确的方向。

    https://suyati.com/blog/mongodb-vs-couchbase/

    https://www.couchbase.com/comparing-couchbase-vs-mongodb

    因为,在您的特定情况下,您强调您只有一个大文件,因此也可以考虑使用基于 IMDG(内存中数据网格,例如 Apache Ignite)的解决方案单个节点设置。

    【讨论】:

      【解决方案3】:

      您可以根据您需要的操作逻辑以编程方式解析和保存 SQL 表中的数据:

      1. 将所有子项(包含所有内容)作为文本保存在 1 个表格中,每个顶部元素。

      元素 |儿童(文字)

      "AssetID" |  {
              "IDType": "URI",
              "IDSpec": "http://acplt.org/Assets/Motor_M23"
          },
      
      1. 将元素保存在表格中,并将第一级子元素(包含所有内容)分别保存在每个顶部元素中。

      ID |元素

      元素 ID |孩子(文字)

      1 | "AssetID"
      
      1 | "IDType": "URI"
      1 | "IDSpec": "http://acplt.org/Assets/Motor_M23"
      
      1. 将元素(名称)保存在表中,id 和父 id 以无限级别解析,如果没有子级则为值。这样,您可以查询所有元素(在任何级别)和内容,并根据需要进行更新。您还可以根据 id 和父 id 从任何元素进行解析。

      ID |元素 |家长 |价值

      1  | "Name"   | 0 | "Motor_M23"
      2  | "AASID"  | 0 | - 
      3  | "IDType" | 2 | "URI",
      4  | "IDSpec" | 2 | "http://acplt.org/AAS/Motor_M23"
      5  | "AssetID"| 0 | -
      6  | "IDType" | 5 | "URI",
      7  | "IDSpec" | 5 | "http://acplt.org/Assets/Motor_M23"
      8  | "Header" | 0 | -
      9  | "PropertyValueStatementContainers" | 8 | -
      10 | "Name"   | 9 | "Config"
      

      【讨论】:

        【解决方案4】:

        Couchbase 的类似 SQL 的 N1QL 进行深度 JSON 遍历和操作。它还可以在查询时索引嵌套数组元素和 UNNEST 数组。它会做你所要求的。

        【讨论】:

          猜你喜欢
          • 2014-03-13
          • 2011-08-13
          • 2023-01-28
          • 1970-01-01
          • 2014-08-11
          • 1970-01-01
          • 1970-01-01
          • 2013-07-15
          • 1970-01-01
          相关资源
          最近更新 更多