Как разработать схему, когда вложенные документы слишком большие - PullRequest
0 голосов
/ 18 октября 2011

Учитывая структуру данных следующим образом, вы можете видеть, что каждая запись в одном файле имеет одинаковые значения для ATT1 и ATT2.

// Store in fileD001.txt
ATT1 | ATT2     | ATT3  | ATT4 ...  | ATT200
D001 | 10102011 | x13   | x14   ... | x1200
D001 | 10102011 | x23   | x24   ... | x2200
...
D001 | 10102011 | xN3   | xN4   ... | xN200

// Store in fileD002.txt
ATT1 | ATT2     | ATT3  | ATT4 ...  | ATT200
D002 | 10112011 | x13   | x14   ... | x1200
D002 | 10112011 | x23   | x24   ... | x2200
...
D002 | 10112011 | xN3   | xN4   ... | xN200

// Store in fileD003.txt
ATT1 | ATT2     | ATT3  | ATT4 ...  | ATT200
D003 | 10132011 | x13   | x14   ... | x1200
D003 | 10132011 | x23   | x24   ... | x2200
...
D003 | 10132011 | xN3   | xN4   ... | xN200


Method One: Assume I use the following structure to store the data.
doc = { “ATT1"    : "D001",
        "ATT2"    : "10102011",
        "ATT3"   : "x13",
        "ATT4"   : "x14",
        ...
        "ATT200" : "x1200"            
      }

Проблема в том, что данные содержат слишком много дублирующейся информации и тратят пространство БД. Однако преимущество заключается в том, что каждая запись имеет свой собственный _id.

Method One: Assume I use the following structure to store the data.
doc = { “ATT1"    : "D001",
        "ATT2"    : "10102011",
        "sub_doc" : { "ATT3"   : "x13",
                      "ATT4"   : "x14",
                      ...
                      "ATT200" : "x1200"
                    }
      }

Вот проблема: размер данных N, который составляет около 1 ~ 5000, слишком велик и не может быть обработан MongoDB за одну операцию вставки. Конечно, мы можем использовать модификатор $ push update для постепенного добавления данных. Однако в каждой записи больше нет _id.

Я не имею в виду, что у каждой записи должен быть свой идентификатор. Я просто ищу лучшее дизайнерское решение для такой задачи.

Спасибо

1 Ответ

0 голосов
/ 18 октября 2011

Вариант 1 приличный, так как он дает вам самые простые данные для работы. Может меньше беспокоиться о пространстве, так как оно дешевое?

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

Вариант 3 немного связан с этим. Есть две коллекции. Первый - это просто поиск пар ATT1 и ATT2. Другая коллекция - это ссылка на другую и окончательные данные.

parent = { att1: "val1", att2: "val2"}

child = {parent: parent.id, att3: "val3"...}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...