Norim
просто для меня слово "гарантии" значит видимо нечно большее чем для вас
Хорошо. Понял вас. На счет моего вопроса вы можете назвать конкретные конфигруации, методы, алгоритмы или приемы, которые могли бы справиться с моей ситуацией: данные должны быть доступны локально, а когда приложение разрешает - быть синхронизируемыми с другим устройством?
Norim
Ваши слова про "думать над бизнес логикой" к сожалению не наводят меня на конкретные действия, которые мне нужно предпринять, чтобы достичь результата.
Nick
Хорошо. Понял вас. На счет моего вопроса вы можете назвать конкретные конфигруации, методы, алгоритмы или приемы, которые могли бы справиться с моей ситуацией: данные должны быть доступны локально, а когда приложение разрешает - быть синхронизируемыми с другим устройством?
не зная ваших бизнес задач и требований и скорее всего без погружения в предметную область - нет. Общие рекомендации дать могу - выписываем потенциальные проблемы, которые хочется переживать и расписываем что делать в каждой ситуации плюс добавляем единое общее поведение на случай если какуюто ситуацию сейчас не в состоянии проработать и выполняем ее всегда когда чтото идет не так. Пример такой ситуации - ваш онлайн кабинет заблокирован, любые дальнейшие действия с паспортом в отделение банка, там разберутся в чем дело
Nick
покажите юзеру что чтото пошло не так и какието заметки потеряются
Norim
покажите юзеру что чтото пошло не так и какието заметки потеряются
Там могут быть заметки за месяц и они все сотрутся. Стирание пользовательских данных - недопустимая ситуация.
Nick
Приложение про заметки. Заметки можно записать локально сколько угодно без интернета или оплаты. Потом при включении синхронизации данные должны быть синхронизированы со вторым устройством.
рекомендация выше вылезла из следующего: - продукт не работает с деньгами или чем критичным (на мой взгляд из описания) - потеря даже всех записей одного человека может привести разве что к репутационным рискам (опять же проблема уровня погружения) - потеря нескольких последних записей не принесет даже репутационных рисков - на рынке куча приложений подобного рода и делать такое же можно только для пет проджекта пощупать технологию и тут достаточно просто узнать о рисках и полностью игнорировать сложность - если проблему сложно воспроизвести в виде теста, то такая проблема как правило имеет настолько дорогое решение, что оно не перекроет профита и будете скорее всего дороже репутационных рисков. Если же можно воспроизвести в виде теста, то это не проблема, т.к. можно выбрать оптимальное с точки зрения затрат решения как видите о чем думал касается бизнеса
Nick
Там могут быть заметки за месяц и они все сотрутся. Стирание пользовательских данных - недопустимая ситуация.
если потеря реально недопустима, то милости просим в банковский сектор с его заморочками и там реалмом заграничным (еще и который с РФ не работает официально) даже пахнуть не будет
Nick
Там могут быть заметки за месяц и они все сотрутся. Стирание пользовательских данных - недопустимая ситуация.
в реальности у обычного бизнес не бывает недопустимых ситуаций, а вот риски, их прямая стоимость устранения и траты на предотвращения или уменьшения вероятности наступления как раз являются неотъемлемой частью. И без бизнеса и его адекватного понимания какую цену он готов платить такие задачи не решают
Nick
и задача в кронтабе на pull/push. Правда масштабируется плохо, но с задачей синхронизации справляется достаточно хорошо
Norim
git
Не думаю, что с помощью него можно контролировать пользовательские данные на устройствах.
Norim
Вы уходите куда-то в абстракции абстракций.
Norim
Я за более конкретное обсуждение потому что пока что мы никуда в нем не продвинулись как мне кажется, кроме того, что нельзя на реалм надеяться, хотя тот же реалм заявляет, что они гарантируют сохранность локальных данных.
Nick
Я за более конкретное обсуждение потому что пока что мы никуда в нем не продвинулись как мне кажется, кроме того, что нельзя на реалм надеяться, хотя тот же реалм заявляет, что они гарантируют сохранность локальных данных.
хрен знает как ответить, если еще не дошло по простому - вам нужен архитектор с опытом построения распределенных систем с уклоном на работу с мобилками. по сложному - бескомпромиссная синхронизация между устройствами и недопустимость потери данных - это сразу нарушение CAP-теоремы со всеми вытекающими и вам надо бы понять почему так и потом выбрать чем жертвовать, опять же сходив к бизнесу заказчику и оценив риски
Nick
Я за более конкретное обсуждение потому что пока что мы никуда в нем не продвинулись как мне кажется, кроме того, что нельзя на реалм надеяться, хотя тот же реалм заявляет, что они гарантируют сохранность локальных данных.
ну и на самом деле и без всяких этих реалмов можно реализовать все тоже самое с тем же уровне гарантий, только чуть геморройнее изза необходимости написать чуть бэкенд кода и с использованием уже полноценной монги в качестве БД. Зато вы получите полный контроль над вот такими ситуациями
Norim
ну и на самом деле и без всяких этих реалмов можно реализовать все тоже самое с тем же уровне гарантий, только чуть геморройнее изза необходимости написать чуть бэкенд кода и с использованием уже полноценной монги в качестве БД. Зато вы получите полный контроль над вот такими ситуациями
Я пытался гуглить и мне к сожалению ничего не выдавало кроме как предложения использовать Firebase Realtime Database. Возможно вы знаете как называется такой функционал, чтобы я возможно смог найти темы с более корректным запросом?
Nick
Я пытался гуглить и мне к сожалению ничего не выдавало кроме как предложения использовать Firebase Realtime Database. Возможно вы знаете как называется такой функционал, чтобы я возможно смог найти темы с более корректным запросом?
для меня это ровно тоже что я описал при использовании гита. Делаете в коде периодическое вытягивание новых данных, если на устройстве есть изменения мержите, новое состояние пушите на сервер - два сетевых запроса и немного логики. На бэке простейшая работа с БД и в целом даже без транзакций можно обойтись. Ну и немного обвязки для авторизации юзера. Если остановиться и перестать гуглить и подумать, то можно заметить что реалм что файирбезовский что монговский делают тоже самое. Ну может там еще нотификашки какието добавлены для удобства, чтоб не ждать следущей итерации. Ну и на бэке там конечно инфра посложнее, но суть та же
Norim
для меня это ровно тоже что я описал при использовании гита. Делаете в коде периодическое вытягивание новых данных, если на устройстве есть изменения мержите, новое состояние пушите на сервер - два сетевых запроса и немного логики. На бэке простейшая работа с БД и в целом даже без транзакций можно обойтись. Ну и немного обвязки для авторизации юзера. Если остановиться и перестать гуглить и подумать, то можно заметить что реалм что файирбезовский что монговский делают тоже самое. Ну может там еще нотификашки какието добавлены для удобства, чтоб не ждать следущей итерации. Ну и на бэке там конечно инфра посложнее, но суть та же
Тут есть несколько проблем: решение конфликтов данных, стратегии обновления, например, порционно, как будут данные ждать выгрузки или загрузки, как отправить данные на другое устройство и сколько оно будет ждать.
Norim
Реалм бы решал бы все это вместо меня, что было бы удобно.
Nick
Реалм бы решал бы все это вместо меня, что было бы удобно.
тогда вы решаете вам удобство или контроль и гарантии поведения
Nick
Реалм бы решал бы все это вместо меня, что было бы удобно.
еще раз напомню, этот вопрос на самом деле в области бизнес потребности и стоимости реализации - "решает вместо меня" имеет цену и риски, "я реализую то же самое решая проблемы" тоже имеет цену и риски. К рискам например можно отнести время реализации - риск не успеть до появления продукта конкурента. Так же к рискам относится вопрос "а что я буду делать, если уже во время эксплуатации вылезут проблемы с реалмом" и у этого есть цена. Если вы реально делаете продукт с целью заработать вы обязаны думать именно в таком ключе. Если это петпроджект или допустим MVP для поиграться с технологией и у вас нулевая стоимость времени и рисков, то тогда стоит просто пренебречь потенциальными проблемами отдельных клиентов и просто сделать
Sarvar
Всем доброго времени суток! использую Realm MongoDB. Все работает как планировано. Но вот вопрос где можно посмотреть данные пользователя например если он сохранил username Где можно посмотреть
Kvhqm
А нужно ли делать проверку, если я обновляю док через findOneAndUpdate
Kvhqm
Например пользователь нажал "обновить", а потом такой "ой блин, не туда нажал" и получается сохраняет неизмененный док, тем самым дёргает роут
Kvhqm
Конечно можно проверить и на фронте, и на бэкэ, где именно проверять не важно. Важно - нужно ли проверять или нет?
Norim
еще раз напомню, этот вопрос на самом деле в области бизнес потребности и стоимости реализации - "решает вместо меня" имеет цену и риски, "я реализую то же самое решая проблемы" тоже имеет цену и риски. К рискам например можно отнести время реализации - риск не успеть до появления продукта конкурента. Так же к рискам относится вопрос "а что я буду делать, если уже во время эксплуатации вылезут проблемы с реалмом" и у этого есть цена. Если вы реально делаете продукт с целью заработать вы обязаны думать именно в таком ключе. Если это петпроджект или допустим MVP для поиграться с технологией и у вас нулевая стоимость времени и рисков, то тогда стоит просто пренебречь потенциальными проблемами отдельных клиентов и просто сделать
Чтобы не возникло проблем с реалмом я стараюсь симулирувать продакшн условия тестируя на MVP, функционал которого похож на живое приложение. На нем и хочу реализовать синхронизацию, а уже потом мигрировать реальным продуктом на него. Я прочитал почти всю документацию по реалму, дошел до синхронизации и застрял с вопросами. Одно из решений, которое они предлагаю это иметь 2 БД реалма: одна локальная, одна для синхронизации, но я не могу понять как я этим так буду работать - сразу с двумя. Сопоставлять данные? А если запись в синхронизируемой бд исчезла не потому, что сервер её удалил, а потом, что с другого устройства эту запись удалили и нужно не вернуть копию с локальной, а удалить и в локальной. И вот как все это обрабатывать? Пока что я к сожалению не нашел решения. То, о чем вы говорите я понимаю, но хочу более конкретных решений, на которые мне стоит обратить внимание.
Nick
Чтобы не возникло проблем с реалмом я стараюсь симулирувать продакшн условия тестируя на MVP, функционал которого похож на живое приложение. На нем и хочу реализовать синхронизацию, а уже потом мигрировать реальным продуктом на него. Я прочитал почти всю документацию по реалму, дошел до синхронизации и застрял с вопросами. Одно из решений, которое они предлагаю это иметь 2 БД реалма: одна локальная, одна для синхронизации, но я не могу понять как я этим так буду работать - сразу с двумя. Сопоставлять данные? А если запись в синхронизируемой бд исчезла не потому, что сервер её удалил, а потом, что с другого устройства эту запись удалили и нужно не вернуть копию с локальной, а удалить и в локальной. И вот как все это обрабатывать? Пока что я к сожалению не нашел решения. То, о чем вы говорите я понимаю, но хочу более конкретных решений, на которые мне стоит обратить внимание.
вы не нашли решения потому что ищите не в той плоскости - ваше решение в области бизнес логики и ее ограничений. Сначала должны появиться требования и описания логики происходящего с точки зрения бизнеса. Потом эти требования анализируются и выбирается решение (не факт что реалм) архитектором. Далее стадия аналитики, где выясняется как перенести бизнес потребности в техническую плоскость связанную с кодом и инфраструктурой. Потом подключаются кодеры/админы/девопсы тобишь инженеры, которые уже реализуют хотелки бизнеса. Вы сейчас решаете проблему на уровне инженера, но задаете вопрос, ответ на который должен дать аналитик, переварив потребности уровня бизнеса. Именно бизнес должен сказать, что делать если пользователь на двух устройствах в оффлайн режиме изменил одну и ту же заметку, а потом одновременно включил интернет, потому что это бизнес проблема а не техническая. А как синхронизировать две базы, имея требования с описание в каких ситуация какой результат должен быть, любой мидл разберется
Nick
Чтобы не возникло проблем с реалмом я стараюсь симулирувать продакшн условия тестируя на MVP, функционал которого похож на живое приложение. На нем и хочу реализовать синхронизацию, а уже потом мигрировать реальным продуктом на него. Я прочитал почти всю документацию по реалму, дошел до синхронизации и застрял с вопросами. Одно из решений, которое они предлагаю это иметь 2 БД реалма: одна локальная, одна для синхронизации, но я не могу понять как я этим так буду работать - сразу с двумя. Сопоставлять данные? А если запись в синхронизируемой бд исчезла не потому, что сервер её удалил, а потом, что с другого устройства эту запись удалили и нужно не вернуть копию с локальной, а удалить и в локальной. И вот как все это обрабатывать? Пока что я к сожалению не нашел решения. То, о чем вы говорите я понимаю, но хочу более конкретных решений, на которые мне стоит обратить внимание.
если у вас нет бизнес заказчика, который сформирует требования, нет архитекторов и аналитиков или хотя бы сеньоров, т.е. вы работаете по факту один, то пока вы для себя не зафиксируете ответы на подобные вопросы как если бы были бизнес заказчиков, дальше не продвинитесь
Eva🇺🇦
Привет А есть разница в том, чтобы хранить массив объектов как json, а bson? Почему вообще кто-то в json сохраняет филды?
Нуриддин
Привет А есть разница в том, чтобы хранить массив объектов как json, а bson? Почему вообще кто-то в json сохраняет филды?
Для обычного пользователя разницы может не много, но bson отлично ужимает данные + быстрее в определённых запросах
Нуриддин
даже в юольшенстве вопросов
Danil
почему не получается дропнуть таблицу?
U
почему не получается дропнуть таблицу?
Не совсем тот чат который тебе нужен вроде бы
Нуриддин
почему не получается дропнуть таблицу?
Если нет secondary key то ничего не должно мешать
Абдурахмон
question WriteError{code=11000, message='E11000 duplicate key error collection: olx.products index: user.username dup key: { user.username: null }', details={}}.
Абдурахмон
Я хочу добавить product, но возникла проблема
Ravshan
ну так он тебе пишет в чём
Абдурахмон
Nick
question WriteError{code=11000, message='E11000 duplicate key error collection: olx.products index: user.username dup key: { user.username: null }', details={}}.
У вас индекс уникальный по данному полю, скорее всего он остался в бд после какихто игрищ и требует ручного удаления
Абдурахмон
?
Nick
Командой collection.dropIndex() или в интерфейсе найти кнопку
Nick
А стоп
Nick
?
Вы не там смотрите, в ошибке указан индекс user.username
Абдурахмон
Вы не там смотрите, в ошибке указан индекс user.username
спасибо, исправлено, что в продуктах оставался индекс user.username
Tor
Внимание, сообщество! Столкнулся с серьёзной проблемой при работе с MongoDB Atlas, требуется ваша помощь и советы. Проблема заключается в следующем: при попытке синхронизации данных между моим приложением и кластером MongoDB Atlas возникает ошибка ServerSelectionTimeoutError. Сначала всё начинается с успешного сообщения о подключении, но затем процесс прерывается из-за ошибки подключения к серверу. Текст ошибки: ServerSelectionTimeoutError: ac-2pfbyq7-shard-00-00.lgtepjy.mongodb.net:27017: connection closed, ac-2pfbyq7-shard-00-02.lgtepjy.mongodb.net:27017: connection closed, ac-2pfbyq7-shard-00-01.lgtepjy.mongodb.net:27017: connection closed, Timeout: 30s, Topology Description: <TopologyDescription id: 65c3834cdc0914b43336d729, topology_type: ReplicaSetNoPrimary, servers: [<ServerDescription ('ac-2pfbyq7-shard-00-00.lgtepjy.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('ac-2pfbyq7-shard-00-00.lgtepjy.mongodb.net:27017: connection closed')>, <ServerDescription ('ac-2pfbyq7-shard-00-01.lgtepjy.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('ac-2pfbyq7-shard-00-01.lgtepjy.mongodb.net:27017: connection closed')>, <ServerDescription ('ac-2pfbyq7-shard-00-02.lgtepjy.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('ac-2pfbyq7-shard-00-02.lgtepjy.mongodb.net:27017: connection closed')>]>. Описание ситуации: Сначала получаю подтверждение о успешном подключении к MongoDB. Затем происходит ошибка ServerSelectionTimeoutError, указывая на то, что соединения со всеми узлами шарда закрыты и в реплика-сете нет главного узла (ReplicaSetNoPrimary). Предпринятые шаги: Проверил настройки сети (VPC, брандмауэры, группы безопасности), чтобы убедиться, что они разрешают подключения к MongoDB. Пересмотрел настройки безопасности в MongoDB Atlas, включая список IP-адресов для подключения. Проверил состояние кластера через панель управления MongoDB Atlas, где всё выглядит активным и здоровым. Изучил логи и метрики мониторинга на предмет возможных проблем. 🔍 Ищу советы и рекомендации от сообщества: возможно, кто-то сталкивался с подобной проблемой или может предложить направления для решения. Любая помощь будет крайне ценна! Спасибо всем заранее за поддержку и советы!
Nick
Внимание, сообщество! Столкнулся с серьёзной проблемой при работе с MongoDB Atlas, требуется ваша помощь и советы. Проблема заключается в следующем: при попытке синхронизации данных между моим приложением и кластером MongoDB Atlas возникает ошибка ServerSelectionTimeoutError. Сначала всё начинается с успешного сообщения о подключении, но затем процесс прерывается из-за ошибки подключения к серверу. Текст ошибки: ServerSelectionTimeoutError: ac-2pfbyq7-shard-00-00.lgtepjy.mongodb.net:27017: connection closed, ac-2pfbyq7-shard-00-02.lgtepjy.mongodb.net:27017: connection closed, ac-2pfbyq7-shard-00-01.lgtepjy.mongodb.net:27017: connection closed, Timeout: 30s, Topology Description: <TopologyDescription id: 65c3834cdc0914b43336d729, topology_type: ReplicaSetNoPrimary, servers: [<ServerDescription ('ac-2pfbyq7-shard-00-00.lgtepjy.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('ac-2pfbyq7-shard-00-00.lgtepjy.mongodb.net:27017: connection closed')>, <ServerDescription ('ac-2pfbyq7-shard-00-01.lgtepjy.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('ac-2pfbyq7-shard-00-01.lgtepjy.mongodb.net:27017: connection closed')>, <ServerDescription ('ac-2pfbyq7-shard-00-02.lgtepjy.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('ac-2pfbyq7-shard-00-02.lgtepjy.mongodb.net:27017: connection closed')>]>. Описание ситуации: Сначала получаю подтверждение о успешном подключении к MongoDB. Затем происходит ошибка ServerSelectionTimeoutError, указывая на то, что соединения со всеми узлами шарда закрыты и в реплика-сете нет главного узла (ReplicaSetNoPrimary). Предпринятые шаги: Проверил настройки сети (VPC, брандмауэры, группы безопасности), чтобы убедиться, что они разрешают подключения к MongoDB. Пересмотрел настройки безопасности в MongoDB Atlas, включая список IP-адресов для подключения. Проверил состояние кластера через панель управления MongoDB Atlas, где всё выглядит активным и здоровым. Изучил логи и метрики мониторинга на предмет возможных проблем. 🔍 Ищу советы и рекомендации от сообщества: возможно, кто-то сталкивался с подобной проблемой или может предложить направления для решения. Любая помощь будет крайне ценна! Спасибо всем заранее за поддержку и советы!
Чем подключаетесь?
Tor
Чем подключаетесь?
Для подключения к кластеру MongoDB Atlas я использую AWS Lambda. Вот основные детали моего подключения: Язык программирования: Node.js. Драйвер MongoDB для Node.js. Строка подключения взята непосредственно из UI MongoDB Atlas, формат строки следующий: mongodb+srv://<username>:<password>@<cluster-address>/?retryWrites=true&w=majority, где <username>, <password>, и <cluster-address> заменены на актуальные данные для доступа к моему кластеру. Lambda функция настроена для работы в VPC с доступом в интернет и настроенными группами безопасности, которые разрешают исходящие соединения к MongoDB Atlas. Использую этот метод для выполнения операций чтения и записи в базу данных из моего приложения. Надеюсь, это ответит на твой вопрос!
Александр
Пытался найти но не вышло, скните если можно… У меня в двух коллекциях есть свои уникальные значения, являющиеся индексами. Как мне связать эти коллекции по этому полю, а не по стандартному _id Перерыл но видимо это как то иначе называется
wisp
переходи на excel и используй ВПР()
wisp
Александр
попробуй $lookup
Спасибо, пошел искать…
Александр
Nick
Для подключения к кластеру MongoDB Atlas я использую AWS Lambda. Вот основные детали моего подключения: Язык программирования: Node.js. Драйвер MongoDB для Node.js. Строка подключения взята непосредственно из UI MongoDB Atlas, формат строки следующий: mongodb+srv://<username>:<password>@<cluster-address>/?retryWrites=true&w=majority, где <username>, <password>, и <cluster-address> заменены на актуальные данные для доступа к моему кластеру. Lambda функция настроена для работы в VPC с доступом в интернет и настроенными группами безопасности, которые разрешают исходящие соединения к MongoDB Atlas. Использую этот метод для выполнения операций чтения и записи в базу данных из моего приложения. Надеюсь, это ответит на твой вопрос!
быстрый гуглеж находит кучу похожих проблем без решения. Может тут кто подскажет, но лучше сразу сбегать в саппорт атласа, может у них есть рекомендации готовые. Ну и был найден такой вариант решения https://www.mongodb.com/community/forums/t/m10-and-aws-lambda-connection-issue/232242/4, но в авс не секу и возможно не актуально в вашем случае
Александр
переходи на excel и используй ВПР()
По моему excel загнется от первой загрузки в 50к записей 😳
wisp
нет
Nick
По моему excel загнется от первой загрузки в 50к записей 😳
вы недооцениваете инструмент, который является фундаментом всей мировой экономики))
wisp
если говорить по факту, то excel - это очень интересный инструмент) даже есть поиск самого эффективного распределения средств. да и написан он на плюсах, поэтому ничего его не загнёт
Александр
вы недооцениваете инструмент, который является фундаментом всей мировой экономики))
Этот инструмент от 10к записей, уже начинал не очень хорошо себя чувствовать. Ну либо я слишком много формул там использовал 🙈
Nick
Этот инструмент от 10к записей, уже начинал не очень хорошо себя чувствовать. Ну либо я слишком много формул там использовал 🙈
конечно его можно нагрузить, но как правило это реально много формул и промежуточных расчетов, когда лень или нет знаний упростить обсчет на VBA. Ну и я молчу про превращение экселя в интерфейс к какойнить нормальной БД и там уже в самом экселе остается минимальные постройки графиков, а тяжесть улетает на серваки.
Vladimir
Подскажите, можно ли узнать, какой запрос сожрал всю память?
Нуриддин
В psmdb была функция логирования подобных инцидентов
Нуриддин
Vened
Привет всем Есть стандалон на версии 6.0.11. Юзер пытается создать следующий partial index: db.getCollection("autoMeetingRecordTasks").createIndex( {"domainId": 1,"eventId": 1}, { partialFilterExpression: {"removed" : {$in:[null, false]}}, unique: true, } ) - и обламывается с ошибкой: Uncaught MongoServerError: Error in specification { partialFilterExpression: { removed: { $in: [ null, false ] } }, unique: true, name: "domainId_1_eventId_1", key: { domainId: 1, eventId: 1 }, v: 2 } :: caused by :: Expression not supported in partial index: removed $in [ null false ] Но при этом в репликасете с той же версией монги индекс (по его словам) создаётся. В чём может быть проблема?
Asset
Expression not supported in partial index: removed $in [ null false ] ?
Ravshan
в partialFilterExpression $in нельзя юзать как помню попробуй так partialFilterExpression: { $or: [ { "removed": { $exists: false } }, { "removed": false } ] },
Vened
Не, затык оказался в другом. Стандалон обновляли с пятой версии и забыли сделать db.adminCommand( { setFeatureCompatibilityVersion: "6.0" } )
Vened
Когда сделали - индекс нормально накатился
Kirilll
Всем привет Обновились с 4 на 6 версию монги монго шелл версии 2.1.4 Кто то сталкивался с тем, что автокомплишн коллекций и команд по типу findOne не работает?