2013-08-06 4 views
1

ВопросВ коллекции Meteor используйте поле массива или другую коллекцию?

Короче говоря, мой вопрос: когда массив в документе изменен, будут ли пользователи получить новый массив, или только изменения?

Если этот вопрос непонятен, я описал свою проблему ниже.

Проблема

У меня есть коллекция, чьи документы содержат поле массива два пользователя будет толкать значения в. Документ, в этой коллекции вид выглядит следующим образом:

var document = { 
    userId1: "...user id...", // The id of the first of the two users. 
    userId2: "...user id...", // The id of the second of the two users. 
    data: [] // The field the two users will push values to. 
} 

data будет с самого начала быть пустым, и пользователи будут затем по очереди толкая значения к нему.

Когда один из пользователей нажимает некоторое значение на data, сервер отправляет изменения второму пользователю. Будет ли второй пользователь получать весь файл data -array или просто изменения (толкаемое значение)? Я немного обеспокоен тем, что второй пользователь получит весь файл data, хотя это всего лишь одно значение, которое было нажато на него, и если data содержит много значений, я боюсь, что это станет узким местом.

В этом случае? Если это так, использование другой коллекции для хранения значений решит ее, правильно? Что-то вроде этого:

var document = { 
    id: "...unique id...", 
    userId1: "...user id...", // The id of the first of the two users. 
    userId2: "...user id..." // The id of the second of the two users. 
} 

var documentData = { 
    idReference: "...the unique id in the document above...", 
    value: "...a value..." 
} 

Вместо проталкивания значения в массив в document, вставьте их в коллекцию, содержащую documentData. Это (я знаю) не будет иметь недостатки, я боюсь, что первое решение имеет (но я скорее использую первое решение, если оно не имеет недостатка).

+1

Вы можете дважды проверить, что происходит с проводом, следуя [этим инструкциям] (http://stackoverflow.com/questions/8952773/chrome-web-inspector-web-socket-debugging) для просмотра фреймов в подключении к веб-раскладке , – user728291

ответ

1

В соответствии с https://github.com/meteor/meteor/blob/master/packages/livedata/DDP.md

  • changed (сервер -> клиент):
    • collection: string (название коллекции)
    • id: string (ИД документа)
    • fields: опционально объект с значениями EJSON
    • cleared: необязательный массив строк (имена полей для удаления)

Пользователи получат новый массив. Чтобы отправлять только «diffs», используйте коллекцию документов {userId: userId, value: value}.

0

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

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