Pavel
Ребята, подскажите какие варианты масштабирования есть? Проблема в том, что primary нагружает дисковую подсистему почти на 100% . Утилизация CPU так же не падает ниже 80%. Диски nvme raid 1, ядер 12. Приложение уже довольно большое и, судя по метрикам, основная нагрузка вызвана update-ами.
Pavel
На secondary, понятно,все штатно..
Nick
Pavel
Роман
𓆩ᬁ҉𓆪 𝕬𝕸𝕴𝕽 𓆩ᬁ҉𓆪
Я создал mongoDB для своего бота.
В этой базе данных есть 2 коллекции
Первая коллекция — настройки робота, вторая коллекция — профиль каждого пользователя.
Количество пользовательских профилей увеличилось, а скорость реакции робота замедлилась.
Какие у вас есть предложения по этому вопросу?
Я использую Motor для подключения к mongodb
𓆩ᬁ҉𓆪 𝕬𝕸𝕴𝕽 𓆩ᬁ҉𓆪
Qwerty
Любой ответ приветствуется
Спасибо
Трудно так сказать по имеющимся данным. Возможно выборку проводите по не индексированному полю, тогда попробовать добавить индекс.
А возможно вообще в коде проблема :)
𓆩ᬁ҉𓆪 𝕬𝕸𝕴𝕽 𓆩ᬁ҉𓆪
Qwerty
𓆩ᬁ҉𓆪 𝕬𝕸𝕴𝕽 𓆩ᬁ҉𓆪
Qwerty
𓆩ᬁ҉𓆪 𝕬𝕸𝕴𝕽 𓆩ᬁ҉𓆪
Является ли библиотека Motor хорошим вариантом для асинхронного подключения к Mongodb?
Qwerty
𓆩ᬁ҉𓆪 𝕬𝕸𝕴𝕽 𓆩ᬁ҉𓆪
Qwerty
Qwerty
Я к тому, что при неимении альтернативы вопрос о хорошем варианте отпадает сам по себе, так как вариантов нет.
Гриша
всем привет! Ребят, такая ерунда: раньше, когда то в схеме было поле accounts.nameAccount и оно было уникальным. Теперь я его удалил из схемы. Проверил, везде в коде ничего туда не записывает, вообще никакого упоминания о нем. Но когда я пытаюсь созранить пользователя, то он пишет эту ошибку
Гриша
Гриша
Гриша
в чем может быть проблема? может я чего то не замечаю?
Qwerty
yopp
Qwerty
Гриша
теперь другая проблема
я решил перезапустить базу на серве и вот что мне выдает
laplandin
Ребят, кто-то пользует mongoose + typescript?
Описали интерфейс документа, скормили в дженерик mongoose.Schem-ы
В чём проблема: По апи из документа хочется отдать только публичную часть без _id, __v и прочей монговской лабуды и минус пару наших полей.
Написали класс репозитория, и решили, что можно обойтись projection, чтобы отобрать только публичные поля при выгребании.
Так вот в интерфейсе документа нет timestamp-ов, нет всех _-андерскор полей, которые тоже хочется скрыть. И лучше, чем объявить их в интерфейсе документа опциональными в голову ничего не приходит.
Как это правильно делается?
-
E1ecti
Ребят, кто-то пользует mongoose + typescript?
Описали интерфейс документа, скормили в дженерик mongoose.Schem-ы
В чём проблема: По апи из документа хочется отдать только публичную часть без _id, __v и прочей монговской лабуды и минус пару наших полей.
Написали класс репозитория, и решили, что можно обойтись projection, чтобы отобрать только публичные поля при выгребании.
Так вот в интерфейсе документа нет timestamp-ов, нет всех _-андерскор полей, которые тоже хочется скрыть. И лучше, чем объявить их в интерфейсе документа опциональными в голову ничего не приходит.
Как это правильно делается?
Рекомендую использовать typegoose, там для этого есть дефолтные классы, а вытаскивать только нужные параметры можно так-же, через проекции
Air
есть
название товара
категория
подкатегория
как по умному написать 1 универсальный запрос, а не делать 3 с условиями на уровне яп, если не заданы 1-2 поля из 3?
Alikhan
Всем привет👋🏻
После 7 дней создания документа, мне нужно изменить status с 1 на 0.
Подскажите пожалуйста как это сделать?
Qwerty
Qwerty
nodejs, mongodb atlas
Попробуйте это . Не могу подсказать или это можно реализовать на уровне монги, думаю для этого обычно используют сторонние средства.
Qwerty
В Python с помощью celery это реализую.
Alikhan
Alikhan
Nick
Alikhan
Nick
Alikhan
Lukaš 🇨🇿
Это кстати дискуссионная фигня, класть в базу данных часть логики проекта
Lukaš 🇨🇿
Не говоря о том, что нагружать крон будет везде одинаково, хоть он внутри базы, хоть снаружи
Qwerty
Lukaš 🇨🇿
Видимо коллеге просто очень нравится постгрес
Lukaš 🇨🇿
Если все работало в монге и тут возник единственный случай с кроном, то это, на мой личный взгляд нарушение границ проекта
Нуриддин
Нуриддин
Простите что так вырулил дискуссию, но ведь проект может иметь огромное количество ньюансов и моментов
Lukaš 🇨🇿
Нуриддин
Как определить границы логики проекта
Lukaš 🇨🇿
Сейчас попробую ответить
Нуриддин
Lukaš 🇨🇿
Логика (алгоритмы, транзакции, события) не существуют сами по себе, а кому-то принадлежат, на разных уровнях могут принадлежать бизнес процессу, или какой-то сущности (если мы говорим про паттерны DDD).
Например у меня есть сервис который отвечает за гео-данные, я рассчитываю, что вся, что взаимодействует с ними - будет в нем, сущности (адреса, улицы, дома) , различные саги, транзакции, все в проекте внутри его предметной области. Т.е этот код знает правила по которым меняется информация, эти правила жёстко заданы кодом. И тут вдруг появляется какая-то внешняя относительно этого кода процедура, которая сама себе что-то меняет никак не опираясь на те вещи, которые написаны в проекте, вот тут я могу считать это "протечкой".
Но это не обязательно, ведь у меня есть и другой проект, в котором я решил сделать иначе и вынес вообще всю логику работы в данными в процедуры и бекенд занимается исключительно алгоритмами, интеграцией с внешними сервисами и ничего не знает о том, как и почему данные в базе ему готовятся именно так. Это в 2 крайних варианта с которыми у меня есть опыт
Нуриддин
Понятно
Lukaš 🇨🇿
Генерально, мысль в том, что я бы её менял базу из-за одного частного случая, а решал бы как в целом архитектурно будет устроена система, а то ведь в чем-то и постгрес не устроит
Нуриддин
То есть мы должны разграничивать сущности и уровни доступа для того чтобы логика работала независимо от готовых данных, а данные в свою очередь должны подходить для работы логики
Нуриддин
Lukaš 🇨🇿
Ну строго говоря да, потому что у тебя может возникнуть например кеширующий сервер перед базой данных и меняя что-то триггером в базе - ты не поменяешь это в кеширующем сервисе
Нуриддин
Lukaš 🇨🇿
Ну вот, в этом ключе ребята до меня верно заметили, что крон уместно использовать снаружи
Lukaš 🇨🇿
Или придется делать триггер и по нему реагировать обновляя кеш
Lukaš 🇨🇿
Но тут уже возникает странный какой-то поток данных, в котором база берет на себя задачи бекенда, тригеря его на обновление по сути второй базы
Нуриддин
Тут кстати стоит заранее обговорить момент, а эти данные уже в СУБД или они записываются параллельно. В первом случае триггер вообще не нужен так как можно добавить ключ к выгрузке времени
Нуриддин
И задача облегчается к редакции кода и структуры данных
Lukaš 🇨🇿
Ну да, поэтому я и сказал, что задача архитектора тут определять, а не от вопроса "где крон поставить" базу выбирать
Lukaš 🇨🇿
Я лишь вспомнил с напрыга пару "но"