【问题标题】:Handling Incredibly large JSON Document in CouchDB在 CouchDB 中处理超大的 JSON 文档
【发布时间】:2016-01-14 05:41:05
【问题描述】:

我是 NoSql 数据库的新手,我很难弄清楚如何处理本地驱动器上可能超过 20MB 的非常大的 JSON 文档。这种结构肯定会随着时间的推移而增加,我担心查询的速度以及必须通过返回的 JSON 对象嵌套进行深入搜索才能得到一个字符串。例如,我的 JSON 嵌套很深。

{
"exams": {
    "exam1": {
        "year": {
            "math": {
                "questions": [
                    {
                        "question_text": "first question",
                        "options": [
                            "option1",
                            "option2",
                            "option3",
                            "option4",
                            "option5"
                        ],
                        "answer": 1,
                        "explaination": "explain the answer"
                    },
                    {
                         "question_text": "second question",
                        "options": [
                            "option1",
                            "option2",
                            "option3",
                            "option4",
                            "option5"
                        ],
                        "answer": 1,
                        "explaination": "explain the answer"
                    },
                    {
                        "question_text": "third question",
                        "options": [
                            "option1",
                            "option2",
                            "option3",
                            "option4",
                            "option5"
                        ],
                        "answer": 1,
                        "explaination": "explain the answer"
                    }
                ]
            },
            "english": {same structure as above}
        },
        "1961": {}
    },
    "exam2": {},
    "exam3": {},
    "exam4": {}
}
}

在主应用程序中,根据考试类型、年份和主题创建和附加问题对象,使得 JSON 文档随着时间的推移变得庞大。我该如何重新建模以避免将来查询缓慢?

【问题讨论】:

  • 听起来您需要创建更多文档,而不是不断扩展同一个文档。
  • 谢谢 Dominic,我知道我应该像使用 SQL 数据库那样做,但是如何“规范化”和关联子文档对我来说有点困惑。

标签: json database nosql couchdb document-database


【解决方案1】:

多米尼克是对的。您需要开始分割文档并将它们存储为单独的文档。

下一个问题是如何在拆分后重新组合文档。

考虑到您使用的是 Couch,我建议您在应用层执行此操作。一个好的起点是创建考试文档并将它们存储在自己的数据库中。然后在另一个数据库中有一个文档(考试),其中包含指向考试文档的指针。

您可以根据需要检索考试文档并进行考试。这对于分页尤其有用,因为大多数人只想查看最近的考试。

【讨论】:

  • 谢谢瑞恩。我想我最初的做法是错误的。我已将大 json 拆分为小问题文档,其中包含考试、年份、日期和 qtext、选项数组、答案和解释等字段。唯一担心的是,由于我目前有 6000 个问题,那么这意味着我将制作 6000 个文档,这对我来说感觉就像制作 6000 个表一样从 SQL DB World 中获得了新鲜感:(
  • 这不一定是问题。请记住,在大多数情况下,NoSQL 将与 SQL 完全不同。 CouchDB 非常轻松,您几乎可以使任何结构工作。您只需要练习和试验,直到找到合适的平衡点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多