Обработка общих объектов в Nosql (хранилище документов) - PullRequest
0 голосов
/ 01 апреля 2011

Есть одна вещь, которую я не понял с базами данных документов, это как работать с общими объектами.Возьмите эти два разных объекта / документа:

Email
    BelongsTo (User object)

Comment
    WrittenBy (User object)

Пользователь является одним и тем же пользователем в обоих документах.

  • Являются ли фактические пользователи хранятся в документах или какой-либо ссылки(как в СУБД)
  • Как обрабатываются изменения в пользователе (новое имя и т. д.)?

Ответы [ 2 ]

0 голосов
/ 02 декабря 2012

Я бы сказал, что это зависит от того, как вы планируете использовать данные.Например, если он интенсивно читается и вы обращаетесь только к имени пользователя пользователя в объекте, то, возможно, было бы лучше дублировать эту информацию и в комментарии.Это, конечно, приведет к более высокой стоимости обновления, если вы разрешите изменение имени пользователя и что важно, чтобы комментарии обновлялись с использованием последнего имени пользователя.Мы использовали хранилище документов для наших моделей чтения и пошли по пути дублирования данных, поскольку вместо этого мы создали эффективные представления / документы, созданные для одного контекста представления.Конечно, обновления стали более ресурсоемкими, но для нас это было нормально.Я также работал с другой конструкцией, используя «ручные» ссылки между doc1 и doc2 на основе идентификаторов.Немного больше ручной работы, но гораздо меньше волшебства, чем с O / RM.

Существует классический пример с BlogPost - <1: N> - Комментарии, где комментарии могут содержаться в посте, к которому мы будем иметь доступчерез идентификатор.Опять же, как вы будете использовать это?Будете ли вы когда-либо использовать комментарии без отображения поста?Вас всегда интересуют комментарии при просмотре поста?Существуют ли основные ограничения общего объема хранения документа, например, 16 МБ в MongoDB?Тогда вам, возможно, придется разделиться.

Я знаю очень расплывчатый ответ, но это также очень "вопрос зависит от варианта использования".

0 голосов
/ 01 апреля 2011

Это зависит от используемой вами реализации NoSQL.Вы можете сделать это несколькими способами: если вы используете JCR (JackRabbit, CRX и т. Д.), Вы можете на самом деле сохранить ссылку на пользовательский узел или вы можете использовать реляционный подход и сохранить адрес пользовательского узла.

...