yopp
по цене атласа
yopp
+ суппорт вероятно
Dmitry
Надо будет сравнить
yopp
да смысл. платформенный эфеект же
yopp
те кто уже в экосистеме монги, скорее выберут монгу, а не реалм
Dmitry
те кто уже в экосистеме монги, скорее выберут монгу, а не реалм
Те кто в экосистеме монги не пишут мобильные приложения
yopp
кек
yopp
окей!
Dmitry
:)
Dmitry
ну ок, я пишу
Dmitry
у меня монга и реалм
Dmitry
Но я не покупаю синхронизацию
Andrey
Всем привет. как правильно удалить бд в условиях когда нехватка места на диске. Делаю так. use mydb; db.dropDatabase() { "errmsg" : "exception: Error 28: No space left on device", "code" : 17035, "ok" : 0 }
Yar
привет, подскажите, есть bson в бд. можно ли сделать запрос, чтоб получить его уже в читаемом виде? ибо я на сервер зашел, хочу данные чекнуть
Vova
mongo.exe, Compass, другие аналоги
Yar
я через консоль, на сервере
Yar
есть ли варианты?
Yar
чтоб вне драйвера/проги сделать это
Vova
sudo mongo
Yar
sudo mongo
что будет в результате, я через консоль же
Vova
что будет в результате, я через консоль же
Ну так почитай документацию по mongo > sudo mongo > use database-name > db.collection-name.find({ filter })
Yar
ок
Vova
Это обычное консольное приложение
Vova
Официальное
Yar
это ответ на мой первостепенный вопрос?
Vova
Да, find вернёт все данные из коллекции в читабельном виде, через filter задаешь фильтрацию, можешь также почитать про projection
Yar
ок. спасибо, про mongo пошел читать.
Александр
Господа, нужен совет, у меня есть такая задача есть модель сообщений чата у каждого чата есть уникальный ид вопрос - как нумеровать сообщения монгой в нутри чата пример чат_ид=а1, чат_локал_ид=1 чат_ид=б1, чат_локал_ид=1 чат_ид=б1, чат_локал_ид=2 чат_ид=а1, чат_локал_ид=2 чат_ид=а1, чат_локал_ид=3 и тд…
Александр
вопрос не понятен, поясните, пожалуйста
попробую на примере у меня есть 2 чата а1 и б1 так же есть коллекция в монге для сообщений задача в том, что бы ставить локальный последовательный номер сообщения в рамках чата прмер с коллекцией сообщения {чат_ид: а1, чат_локал_ид=1 } {чат_ид: б1, чат_локал_ид=1 } {чат_ид: б1, чат_локал_ид=2 } {чат_ид: а1, чат_локал_ид=3 } {чат_ид: а1, чат_локал_ид=4 } нужно что бы ставился чат_локал_ид монгой, для это думал приспособить $inc, но не выходит как то =(
yopp
Если вам нужен идентификатор сообщений используйте ObjectID
Александр
Если вам нужен идентификатор сообщений используйте ObjectID
мне нужно не ObjectID а именно порядковый номер сообщения в чате
yopp
С какой целью?
Александр
С какой целью?
что бы мобильный клиент знал какие сообщения у него пропущены
yopp
Используйте дату со временем
Александр
Используйте дату со временем
это первое что пришло в голову, но это не дает ответа какие сообщения был не доставлены
yopp
У вас в чате сколько участников может быть?
Анатолий
привет
Анатолий
вопрос - память у MongoDB - как понять сколько нужно выделять?
Анатолий
я запутался в нагугленных ответах - одни пишут что нельзя так как там memory-mapped файлы, другие пишут что с 3.2 версии можно, т.к. у wiredtiger есть настройка
yopp
N < 50 000
Тогда точно время. Сохраняйте на клиенте время последнего сообщения и при следующем подключении достаёте все сообщения после этого времени.
yopp
Время должно быть строго серверное
yopp
вопрос - память у MongoDB - как понять сколько нужно выделять?
Грубо: размер всех индексов + размер фактически используемых данных
Анатолий
а как понять "размер фактически используемых данных"? по английски это working set?
Анатолий
если скажем мне надо отфильтровать документы за сегодня
Анатолий
значит размер = сумма всех документов за сегодня?
yopp
Примерно, да.
Анатолий
а если памяти меньше начинается вытеснение памяти? или это в прошлом?
Александр
Тогда точно время. Сохраняйте на клиенте время последнего сообщения и при следующем подключении достаёте все сообщения после этого времени.
беда в том, что у человека может быть несколько телефонов. На одном он просмотрел сообщение а на втором нет. Потом человек продолжил переписку с какого то другого девайса. Вернувшись на первый девайс окажется, что он смотрел сообщение с большим индексом чем у него уже есть с запросит от последнего просмотренного с другого телефона
Анатолий
просто ответы от 2012 года..
yopp
а если памяти меньше начинается вытеснение памяти? или это в прошлом?
Вытеснение документов из кеша начнётся в любом случае, если документов больше чем памяти.
Александр
Время должно быть строго серверное
так есть вероятность что какие то сообщения просто не дошли до клиента в бд они есть, а на девайс не дошли, но дошло слежующее за ним это куда худший вариант, для этого и делали такие ид, что бы понять были ли пропуски
yopp
Как они могут не дойти?
yopp
Если вы доставляете сообщения через монгу, то «недоставленного» сообщения быть не может.
Александр
это мобильный интернет может быть разрыв сети, может упасть клиент до того, как сообщение положили в бд и тд
yopp
разделите свою проблему на части. У вас их сейчас несколько: положить сообщение в хранилище, достать последние с какой-то точки, синхронизировать последнюю точку
yopp
Положить сообщение возможно только если есть соединение. Сообщение считается «доставленым» в момент когда его записали в монгу. Вы можете хранить две даты: время когда клиент написал сообщение и время когда сообщение было фактически записано в хранилище. Но я бы решил проблему интерфейсно, как iMessage и не позволял бы отправить сообщение далеко из прошлого. Для синхронизации использовать время записи в хранилище. Время это всегда серверное.
yopp
Тогда проблемы с out-of-order сообщениями не будет. У нас всегда есть внутренний порядок: дата записи в хранилище. Она всегда возрастает.
yopp
Тогда синхронизация непрочитанных сообщений, это задача получения обновлений после конкретной точки во времени.
yopp
Но это требует для всех клиентов использовал монгу как single source of truth. Если у вас ещё есть end-to-end соединение между участниками, в котором нет гарантии доставки, то out-of-order все ещё может быть. Я так понимаю вы говорите о кейсе, когда пользователь отправил три сообщения, а дошло только первое и последнее. Вы хотите иметь возможность определить что среднее сообщение потерялось
yopp
На мой взгляд проще будет использовать end-to-end исключительно для нотификаций, что надо обновить какой-то чат. И уже из чата в монге загружать новые сообщения.
yopp
Скорее всего есть какие-то готовые протоколы для обмена сообщениями, где эту и другие проблемы синхронизации уже решили.
Александр
Спасибо за развернутый ответ но такое решение будет требовать выгрузки всей истории если у меня будет 100 чатов в которых быдет по 100к сообщений которые накопились за сутки, то это очень дорого будет их синхронизировать сейчас же я просто отдаю по требованию нужный сруз данных (через пагинацию) историю в чате клиенты смотрять при скроле сообщения в бд и выводят их, если есть пропуски, то запрашивают определенные номера сообщий в чате по аналогии как у телеграма https://core.telegram.org/method/messages.getMessages
Nick
а как можно это делать? был бы признателен за наводку
Подтверждайте доставку каждого сообщения на клиент, с временем того самого сообщения. Это время указывайте в юзер-девайс как метку, чтобы при реконнекте использовать ее для определения точки с которой слать
Nick
Если у вас есть пропуски в нумеоации это означает что ваш протокол работы с сообщениями не соответсвует вашим требованиям и нужно менять в первую очередь эту часть, а не мучать бд
Александр
Если у вас есть пропуски в нумеоации это означает что ваш протокол работы с сообщениями не соответсвует вашим требованиям и нужно менять в первую очередь эту часть, а не мучать бд
но я придерживаюсь подхода, при котором данные надо обновлять, только если их запросили. По этому для меня пропуски это критичное явление. Но нужно как то дать возможность клиенты знать одновзначно что пропущено
Nick
Вы должны выдать столи последние 10 потом еще 10 и т.д?
Kirill
Не могу осилить архитектуру данных в монге после sql, можете помочь? 3 сущности, заказ, пользователь, канал уведомления Хранить в заказе ссылки пользователя, а в пользователе каналы уведомлений, это как то по sql'ному. Как в монге можно расположить эти данные?
Александр
Вы должны выдать столи последние 10 потом еще 10 и т.д?
да когда клиент входит в приложение, то он запрашивает чаты по времени когда он был последний раз онлайн, в ответе у него прилетает чаты с номерами поседних сообщений в их когда он заходит в чат, то он просит 25 сообщение от последнего, если они есть у него в бд, то показывает их, если есть с пропусками, то просит по номерам только пропуски, если ничего нет, то просит лист всех 25 штук когда человек листает историю, таботает так же, выбирает у себя пачку сообщий, если нет чего просит по ид или просит лист если вообще пусто
p
Всем привет, как лучше модель объявлять? 1. let model1 = mongoose.model('model1', mySchema, 'collectionName'); 2. const db = mongoose.createConnection('mongodb://' + ...); let model2 = db.model('model2', mySchema, 'collectionName')