yopp
но очередь это лишнее звено
Маrаt
http://highscalability.com/blog/2013/5/1/myth-eric-brewer-on-why-banks-are-base-not-acid-availability.html тут вроде о таком подходе рассказывают
yopp
да
yopp
овердрафт это яркий пример того как разрешаются проблемы с consistency :)
✙ Nikita
или например это очередь, в которую складываются тразакции и consumer из этой очереди, который в линейном порядке эти транзакции обрабатывает
А зачем вообще в этом случае очередь? Если транзакции не нужны, я могу перевод сделать в виде двух последовательных запросов, которые изменяют балансы двух счетов?
yopp
очередь снижает latency
yopp
если у вас операции обрабатываются раз в 10 секунд, то у вас максимальная задержка — 10 секунд
yopp
и в среднем она будет где-то 5
yopp
а с очередью она будет примерно равна глубине очереди
yopp
это если ну никак нельзя подождать 5 секунд и надо asap
Александр
А зачем вообще в этом случае очередь? Если транзакции не нужны, я могу перевод сделать в виде двух последовательных запросов, которые изменяют балансы двух счетов?
А если прилетит несколько одновременных запросов? А если баланс опустится ниже нуля у кого-то? Линеаризация с помощью очереди, это выход, да. Но просто так такое делать нельзя.
yopp
что вы за 10 секунд операции выбрали и по одной их обработали, что у вас консумер по одной их из очереди достаёт
yopp
разница только во времени ожидания обработки
yopp
у вас в любом случае операции линейные
yopp
транзакционная целостность переоценена
yopp
это не единственная модель при которой можно добится необходимого результата
ולאד
вообще, денежные переводы на хайлоде дело интересное
yopp
вообще, денежные переводы на хайлоде дело интересное
можете открыть нормативную документацию цб и посмотреть насколько оно интересное :)
✙ Nikita
yopp
да, конечно
yopp
вам больше одного в 99.9% случаев никогда и не понадобится
yopp
вообще, денежные переводы на хайлоде дело интересное
а на деле, очень мало мест где «хайлоад». даже 1 операция в секунду это уже 84к операций в день :)
yopp
мало где есть такой поток денег
Александр
в этом случае тогда только 1 консумер может быть? или я чет не врубаюсь?
Да, если запись в базу идёт в однопоточном режиме, то проблем с целостностью не будет.
yopp
на запись транзакций нет ограничений в параллелизме
yopp
а вот на обработку транзакций — есть
yopp
транзакция в таком случае это стейтмашина
yopp
у неё есть начальное состояние, в котором она записывается и есть какой-то конечный набор состояний, в которое она перейдёт по результатам обработки
yopp
и обработчик — единственный процесс
Александр
Да, вы точнее сформулировали)
Александр
Есть какая-то книга, почитать про эти подходы?
✙ Nikita
Есть какая-то книга, почитать про эти подходы?
+, тоже было бы интересно, или хоть как гуглить их
Александр
Я просто жил в убеждении что без ACID, constraint и транзакций жить нельзя. Потом почитал как люди с принципиально однопоточными СУБД типа Редиса и Тарантула работают. А теперь вижу что и в многопоточной монге, с помощью очередей вполне можно целостность обеспечить. Теперь есть чувство, что я много чего упускаю
Viktor
Всем привет Подскажите кто как делает миграции в mongodb? Есть ли какой нибудь общепринятый подход к миграциям, тулзы? имею ввиду добавление индексов, коллекций и пр
✙ Nikita
Можно ли использовать MongoDB Atlas если у меня не AWS/GCP/Azure ? а то они только про них и твердят на сайте, я вот не могу понять
Daniil
Можно ли использовать MongoDB Atlas если у меня не AWS/GCP/Azure ? а то они только про них и твердят на сайте, я вот не могу понять
Так а зачем вам их иметь? Атлас просто предлагает выбрать на какой платформе он автоматически развернёт кластер
Daniil
Вам в принципе вообще побоку на какой платформе будет
✙ Nikita
я думал они типа интегрируются как то с этими провайдерами
✙ Nikita
и они типа всю настройкy вместо меня проделают на сервисе который я выберу?
Daniil
По сути там один клик и все развернется
Daniil
Выбор платформы/региона имеет значения например для тех, кто юзает амазон в определённом регионе, чтобы апп-сервера и кластер бд были рядом например
✙ Nikita
ну а вообще эти 57$ стоят того? (беслпатный план не подходит, данных больше чем он позволяет хостить) просто сейчас монга хоститься самостоятелньо на сервере за 15$ и типа есть ли смысл мигрировать за счет того что саппорт сервера будут делать они?
Daniil
Ну и удобство
Daniil
В целом это копейки же, но если на данном этапе это значимые деньги для проекта, то можно и на селф хостед решении оставаться
Александр
Мир не стоит на месте. Ещё 20 лет назад для меня гигабайт данных было много, заоблочно много. А теперь моя команда пишет etl, которые пропускают терабайты в час
Ну объёмы это понятно. Они вместе с мощностью железа будут расти. А тут про подходы к работе с данными. Скажем так не хрестоматийные. Вот это хотелось бы изучить подробнее.
Маrаt
Да, если запись в базу идёт в однопоточном режиме, то проблем с целостностью не будет.
Можно еще придумать алгоритм чтобы таски не пересекались и несколько консюмеров юзать
Mika
Доброго дня всем. Скажите, уважаемые, есть ли в MongoDB Atlas возможность использовать разные ключи для шифрования разных бд, кластеров или коллекций в пределах одного проекта? Пока что я нашёл только возможность шифровать проект одним ключом для всех пользователей и всего набора данных.
Женя
Всем привет У меня стоит автоинкремент на _id const orders = await Order.find({ $or: [{ 'info.email': { $regex: search, $options: 'i' } }, { _id: { $regex: search, $options: 'i' } }] }); я ищу на совпадение по id или у email но я не могу понять в чём проблема Cast to number failed for value "i" at path "_id" for model "Order"
Anonymous
Ребят вот у меня есть база, там есть пользователи с _id и у каждого пользователя есть code И я хочу сделал функцию что бы перебирала все code и если к примеру похоже на "codenone" то принт
Anonymous
Можете помочь как это реализовать в плане монго
Anonymous
{"_id":181818, "code":"codenone"}{"_id":181818, "code":"codenone"}{"_id":181818, "code":"codenone"} К примеру я перебрал курсор и получил такую картину, как мне из всех этих перебирать code
Дмитрий
Не очень понятно, что перебирать и с какой целью?
Дмитрий
Делаете выборку, кладёте в переменную и циклом уже теребонькаете. Ну или я не понял =)
Anonymous
Извеняюсь, я уже взял через get
Anonymous
Спасибо вам)
yopp
Неужели у всех кастомная автоматизация ?
Да, в монге нет схемы. Схема это часть бизнес-логики. Поищите в группе по словам forward only, я рассказывал как проще всего сделать
✙ Nikita
Насколько законно изменять способ генерации поля _id в монге? Например мне нужен не длинный ObjectId, а autoincrement, или наоборот, UUID какой-то?
yopp
И это тоже
yopp
ObjectID это и есть UUID, с чуть меньшей энтропией
✙ Nikita
просто например есть чеки, и нужно чтобы кассир видел порядковый номер чека, вместо ObjectID, который он может скинуть в случае возникновения проблем
✙ Nikita
или это лучше просто отдельным полем сделать?
✙ Nikita
чтобы он мог сказать "в чеке номер 235 неверно посчитана общая сумма", а не "в чеке за 12 число в 12:35 на контрагента Василий на сумму 320 неверно посчитана сумма"
✙ Nikita
банальный пример такой
yopp
Первый вариант это решение несуществующей проблемы