2013-10-14 4 views
1

Я новичок в базах данных NoSql, и мне трудно понять, как обрабатывать очень большой JSON-документ, который может составлять более 20 МБ на моем локальном диске. Эта структура, безусловно, будет увеличиваться с течением времени, и я беспокоюсь о скорости запросов и необходимости искать в глубину, хотя возвращаемое объектное ядро ​​JSON просто для того, чтобы получить строку. Мой JSON глубоко вложен, например, так.Обработка Невероятно большой документ JSON в CouchDB

{ 
"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

Спасибо Доминик, я знаю, что это то, что я должен делать, как с базами данных SQL, но как «нормализовать» и связывать поддокументы, это для меня головоломка. – shanks

ответ

0

Dominic is right. Вам необходимо начать разделение документов и их хранение в виде отдельных документов.

Следующий вопрос - как перекомпоновать документ после его раскола.

Учитывая, что вы используете Couch, я бы рекомендовал сделать это на уровне приложения. Хорошей отправной точкой было бы создание экзаменационных документов и их хранение в собственной базе данных. Затем введите документ (экзамены) в другую базу данных с указателями на документы экзамена.

Вы можете получить документ об экзаменах и получить экзамены один за другим по мере необходимости. Это может быть особенно полезно для поискового вызова, поскольку большинство людей хотят увидеть только самые последние экзамены.

+0

Спасибо Райан. Я думаю, что сначала искал это неправильно. Я разделил большой json на небольшие документы вопроса с такими полями, как экзамен, год, дата и qtext, массив параметров, ответ и объяснение. Единственное беспокойство заключается в том, что, поскольку у меня в настоящее время имеется 6000 вопросов, это означает, что я буду делать 6000 документов, которые чувствуют, что я прихожу к новой версии SQL DB World, составляя 6000 таблиц :( – shanks

+2

Это не обязательно проблема. Имейте в виду, что NoSQL будет радикально отличаться от SQL в большинстве случаев. CouchDB очень расслаблен, и, скорее всего, вы можете сделать практически любую структуру работы. Вам просто нужно практиковать и экспериментировать, пока не найдете правильный баланс. –

Смежные вопросы