Как контролировать точку вставки документа в MongoDB? - PullRequest
1 голос
/ 02 апреля 2011

Предположим, у меня есть таблица сообщений в блоге.Я хочу хранить все комментарии в блоге вместе.Если через 1 год появится новый комментарий к сообщению, я хочу добавить его в последний комментарий к коллекции.Это сделано для того, чтобы при чтении комментариев к этому посту я выполнял операцию SEEK.

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

Comments
{
   {post_id: 1, cmt_id:1, usr: 'bob', text: 'Cool!'}
   {post_id: 1, cmt_id:2, usr: 'bob', text: 'Cool!'}
   {post_id: 2, cmt_id:3, usr: 'rob', text: 'Cool!'}
   {post_id: 2, cmt_id:4, usr: 'job', text: 'Cool!'}
}

Если есть новый комментарий к посту 1, тогда я хочу коллекцию:

Comments
{
   {post_id: 1, cmt_id:1, usr: 'bob', text: 'Cool!'}
   {post_id: 1, cmt_id:2, usr: 'bob', text: 'Cool!'}

   {post_id: 1, cmt_id:5, usr: 'bob', text: 'Cool!'} <-- inserted

   {post_id: 2, cmt_id:3, usr: 'rob', text: 'Cool!'}
   {post_id: 2, cmt_id:4, usr: 'job', text: 'Cool!'}
}

Этовозможно, или я все еще думаю об этом в SQL?

Если есть альтернативный подход с такой же или лучшей производительностью?

Спасибо за чтение.

Ответы [ 2 ]

1 голос
/ 02 апреля 2011

Прежде всего вы думаете по-SQL. В mongodb для достижения лучшей производительности нужно встраивать все. В вашем случае вы должны встраивать комментарии в блог, например:

Post
{
    _id,
     PostText,
     Comments { cmt_id, usr, text },
     ...
}

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

Надеюсь, это поможет!

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

Вам никогда не гарантируется, что комментарии хранятся в порядке на диске в любом случае.Если сообщение 1 получит комментарий, то сообщение 2, затем сообщение 1 снова комментарии будут чередоваться на диске, время между комментариями не имеет значения.Пока у вас есть индекс на post_id для коллекции комментариев, загрузка всех комментариев к сообщению всегда будет быстрой.

Единственный способ гарантировать, что комментарии являются смежными, - это добавить их в качестве вложенных документов., но это неразумно.Во-первых, это будет означать, что почтовый документ придется часто перемещать на диск (очень дорогая операция в Mongo, поскольку глобальная блокировка записи сохраняется на протяжении всего перемещения), а во-вторых, что-то вроде комментариев не ограничено, посколькуочень популярная публикация, в которой вы можете очень легко достичь предела размера документа, и не будет никакого способа добавить больше комментариев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...