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
что будет в результате, я через консоль же
Yar
ок
Vova
Это обычное консольное приложение
Vova
Официальное
Yar
это ответ на мой первостепенный вопрос?
Vova
Да, find вернёт все данные из коллекции в читабельном виде, через filter задаешь фильтрацию, можешь также почитать про projection
Yar
ок. спасибо, про mongo пошел читать.
Александр
Господа, нужен совет, у меня есть такая задача
есть модель сообщений чата
у каждого чата есть уникальный ид
вопрос - как нумеровать сообщения монгой в нутри чата
пример
чат_ид=а1, чат_локал_ид=1
чат_ид=б1, чат_локал_ид=1
чат_ид=б1, чат_локал_ид=2
чат_ид=а1, чат_локал_ид=2
чат_ид=а1, чат_локал_ид=3
и тд…
AstraSerg
Александр
вопрос не понятен, поясните, пожалуйста
попробую на примере
у меня есть 2 чата а1 и б1
так же есть коллекция в монге для сообщений
задача в том, что бы ставить локальный последовательный номер сообщения в рамках чата
прмер с коллекцией сообщения
{чат_ид: а1, чат_локал_ид=1 }
{чат_ид: б1, чат_локал_ид=1 }
{чат_ид: б1, чат_локал_ид=2 }
{чат_ид: а1, чат_локал_ид=3 }
{чат_ид: а1, чат_локал_ид=4 }
нужно что бы ставился чат_локал_ид монгой, для это думал приспособить $inc, но не выходит как то =(
AstraSerg
yopp
yopp
Если вам нужен идентификатор сообщений используйте ObjectID
yopp
С какой целью?
Александр
С какой целью?
что бы мобильный клиент знал какие сообщения у него пропущены
yopp
Используйте дату со временем
yopp
У вас в чате сколько участников может быть?
Анатолий
привет
Анатолий
вопрос - память у MongoDB - как понять сколько нужно выделять?
Анатолий
я запутался в нагугленных ответах - одни пишут что нельзя так как там memory-mapped файлы, другие пишут что с 3.2 версии можно, т.к. у wiredtiger есть настройка
Александр
yopp
N < 50 000
Тогда точно время. Сохраняйте на клиенте время последнего сообщения и при следующем подключении достаёте все сообщения после этого времени.
yopp
Время должно быть строго серверное
Анатолий
а как понять "размер фактически используемых данных"? по английски это working set?
Анатолий
если скажем мне надо отфильтровать документы за сегодня
yopp
Анатолий
значит размер = сумма всех документов за сегодня?
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 штук
когда человек листает историю, таботает так же, выбирает у себя пачку сообщий, если нет чего просит по ид или просит лист если вообще пусто
yopp
yopp
p
Всем привет,
как лучше модель объявлять?
1. let model1 = mongoose.model('model1', mySchema, 'collectionName');
2. const db = mongoose.createConnection('mongodb://' + ...);
let model2 = db.model('model2', mySchema, 'collectionName')
Yurii