2016-03-19 2 views
1

Интересно, использовать хорошую/плохую идею для использования deepstream record.getList для хранения множества уникальных значений, например, электронных писем или любых других уникальных идентификаторов. Основная цель заключается в том, чтобы иметь возможность быстро ответить на вопрос, есть ли у нас, скажем, пользователь с таким электронным письмом (используемым электронной почтой) или другой записью по определенному уникальному полю.Использование списка глубокого потока для десятков тысяч уникальных значений

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

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory 

и мой deepstream сервер ушел. Я был в состоянии исправить это, добавив больше памяти процесса узла сервера с этим флагом

--max-old-space-size=5120 

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

2) Это не было достаточно для моих тестов, так что я precreated список с 50000 пунктов и поместить данные непосредственно в таблицу rethinkdb и получил еще один вопрос о получении списка или модификации его:

RangeError: Maximum call stack size exceeded 

I был в состоянии исправить это с другим флагом:

--stack-size=20000 

это помогает, но я считаю, что это только вопрос времени, когда одна из этих ошибок появляются в производстве, когда размер списка достигает должное значение. Я не знаю, действительно ли это проблема nodejs, javascript, deepstream или rethinkdb. Все это в целом заставило меня подумать, что я пытаюсь использовать неверный путь в списке. Пожалуйста, дайте мне знать. Заранее спасибо!

ответ

2

Хотя вы можете использовать списки для хранения массивов строк, они на самом деле предназначены как коллекции записей - фактические данные будут храниться в самой записи, список будет управлять только порядком записей.

Сказав, что есть два открытые вопросы GitHub для повышения производительности для очень длинных списков по sending more efficient deltas и по introducing a pagination option

Интересных результатов в отношении памяти, хотя, безусловно, то, что должно быть обработано более изящно. В то же время вы могли бы значительно повысить производительность за счет объединения обновлений в одно:

var myList = ds.record.getList('super-long-list'); 

// Sends 10.000 messages 
for(var i = 0; i < 10000; i++) { 
    myList.addEntry('something-' + i); 
} 

// Sends 1 message 
var entries = []; 
for(var i = 0; i < 10000; i++) { 
    entries.push('something-' + i); 
} 

myList.setEntries(entries); 
+0

Мое дело в том, что я не могу сделать массового обновления, как, например, пользователь будет подписывать один за другим, так что я буду получать новые электронной почты в списке за регистрацию. Давайте будем придерживаться уникального примера электронной почты, поскольку это очевидно, но обратите внимание, что у нас есть другие записи с уникальными значениями, которые мне нужно заботиться, поэтому у нас не будет дубликатов. Интересно, не является ли список неправильным архитектурным решением для обработки этой бизнес-логики. Примите во внимание два других решения: deepstream.io-provider-search-rethinkdb и посмотрите на rethinkdb непосредственно для поиска по фильтру или вторичному индексу. Любые другие идеи? –

+1

Имена пользователей и электронные письма неизменяемы - они действительно не меняются. Я думаю, что было бы разумно сохранить их в БД, используя традиционный подход на основе запроса/ответа через RPC. Задача с deepstream.io (и любой другой базой реального времени в этом случае) заключается в эффективном использовании данных в реальном времени. Это означает идентификацию данных a), отображаемых в текущем виде b) при условии (достаточно частое) изменение , которое для имен пользователей может не обязательно иметь место.Вот почему deepstream обеспечивает смесь RPC, событий и записей – wolframhempel

+0

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

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