我是NoSql数据库的新手,我很难找到如何处理一个非常大的JSON文档,在我的本地驱动器上可能超过20MB。这种结构肯定会随着时间的推移而增加,我担心查询的速度,并且必须通过返回的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文档随着时间的推移而变大。如何重新建模以避免将来查询速度慢?
答案 0 :(得分:0)
多米尼克是对的。您需要开始分割文档并将它们存储为单独的文档。
接下来的问题是如何在文档拆分后重新组合文档。
考虑到您正在使用Couch,我建议您在应用层执行此操作。一个很好的起点是创建考试文档并将它们存储在自己的数据库中。然后在另一个数据库中有一个文档(考试),其中包含指向考试文档的指针。
您可以根据需要逐一检索考试文档并获得考试。这对于分页尤其有用,因为大多数人只想看最近的考试。