Yurii
Alexander
Здравствуйте. Столкнулся с ошибкой которая мне всё ломает. Не могу сохранить в mlab число с большим количество цифр.
1000000000000000000 19 цифр ещё могу. Но больше - нет. Это стандартное ограничение? Можно ли его снять?
yopp
вы уперлись в лимит 64 битных целочисленных значений
yopp
используйте decimal128
yopp
Если хочется хранить бесконечно большие значения, то смотрите на BER integer encoding. Это стандартный способ сериализации чисел с произвольной длинной. Но поддержки со стороны монги не будет.
yopp
Строки не очень хороший вариант. Если я правильно помню, то с binary полем в котором BER будут работать операторы сравнения
yopp
eq
10000
16256
2064384
10000000000
yopp
со строками так не прокатит :)
yopp
а кейс очень простой, мы по этому полю решили что-то отсортировать
yopp
и второй момент:
db.ber.find({_id: { $gt: BinData(0,"zhA="), $lt: BinData(0,"paCvyAA=")}})
{ "_id" : BinData(0,"/wA=") }
{ "_id" : BinData(0,"/oAA") }
Yura
А, я не знал/забыл, что bindata монга сравнивает сперва по длинне. Дибильное поведение совершенно, но в этом конкретном случае сыграло на руку.
yopp
https://blog.github.com/2018-10-30-oct21-post-incident-analysis/
The database servers in the US East Coast data center contained a brief period of writes that had not been replicated to the US West Coast facility Because the database clusters in both data centers now contained writes that were not present in the other data center, we were unable to fail the primary back over to the US East Coast data center safely.
yopp
к вопросу зачем в монге роллбэк нужен
yopp
The time required to restore multiple terabytes of backup data caused the process to take hours.
yopp
For example, one of our busiest clusters had 954 writes in the affected window.
yopp
к вопросу о размере роллбэка
yopp
т.е. если бы у их самопального HA велосипеда была бы стратегия отката, они бы не упали на сутки из-за тысячи событий. которые бы потом руками восстановились за пару часов
yopp
ну и вот это: However, applications running in the East Coast that depend on writing information to a West Coast MySQL cluster are currently unable to cope with the additional latency introduced by a cross-country round trip for the majority of their database calls
yopp
60мс латенси хватило чтоб положить приложения
Анатолий
как-то всё муторно
Sergei
43 секунды отсутствия соединения, а не 60мс latency стало причиной
yopp
are currently unable to cope with the additional latency introduced by a cross-country round trip
yopp
из-за падений линка, у них произошел фейловер на праймари, но в другом регионе
в предыдущем праймари остался нереплицированный кусок и сделал обратный фейловер невозможным
из-за переезда праймари, увеличилось latency и приложения работающие в другом регионе похоже перестали укладываться во внутренние таймауты
Sergei
60мс latency у них же всегда была и не увеличивалась
yopp
у них в другом регионе только pages и notifications же
yopp
на картинке
Sergei
теперь я понял
yopp
т.е. если бы не этот факт, они могли бы обслуживать трафик клиентов
yopp
удивительно конечно, что для такого масштаба они всё ещё завязаны на один регион
yopp
majority тут бы не спасло
Yura
majority тут бы не спасло
???? Поясни.
Если только один ролбэк, без мажорити, то получится, что откатываются транзакции, про которые сообщено, что они закоммитились.
Вообще-то, ролбэк - это недостаток, т.к. соседние транзакции видят еще не закомиченные данные. По хорошему, соседние транзакции тоже должны были видеть только после мажорити врайт, и тогда ролбэк не нужен был бы . (Вообще-то, не совсем правда: ролбэк был бы нужен, но он был бы не видимый, в отличии от вполне видимого текущего).
yopp
ролбэк это механизм разрешения конфликта при мерже оплогов
yopp
путём отбрасывания меньшей ветки событий
yopp
majority никак не гарантирует что в момент времени на majority будет одинаковая точка в оплоге
yopp
т.е. что в кластере возможны выборы нового праймари без ролбэка
Sergei
>т.к. соседние транзакции видят еще не закомиченные данные
Это как? Уровень изоляции Read uncommited?
yopp
для такого вот локаута хватит лага в одну запись
Yura
Ролбэк - это откат до общей точки. Если используется мажорити врай, то любая транзакция, про которую сообщено клиенту, что она закомиченна, будет до момента общей точки.
Если мажорити врайт не используется, то клиенту будет сказано, что чейнж закомичен, а на самом деле, он может быть откачен при ролбэке.
yopp
так причём тут клиенты
yopp
видимость транзакций и ролбэк это разные проблемы
Yura
Sergei
я работаю с postgresql, там read commited обычно
Yura
Sergei
так у github mysql
yopp
yopp
но я понял о чём ты, ты о гарантиях записи
Yura
Алгоритм репликации в новой монге (начиная с 3.4) - это адаптированный Raft. Но все гарантии он дает только majority.
Sergei
majority write это параметр, который учитвыается при выборе нового мастера для mongo?
yopp
ну и тут мы встаём перед класическими CAP стульями
yopp
(свет на всём побережье вырубили)
yopp
либо у нас везде majority, но мы платим за это latency эквивалентной максимальной latency в кластере в majority
yopp
либо у нас есть записи с меньшей гарантией и тогда у нас есть на выбор, или ситуация как у гитхаба
yopp
или роллбэк
yopp
ну или у нас CRDT тогда мы можем без ролбэка проехать
Sergei
я вот этот момент не понял
" Because the database clusters in both data centers now contained writes that were not present in the other data center, we were unable to fail the primary back over to the US East Coast data center safely"
В East есть writes, которые не реплицировались в West понятно из-за чего. Наоборот может быть толлько из-за latency.
yopp
Вообще интересно почему праймари продолжил запросы обслуживать
Sergei
"Querying the Orchestrator API displayed a database replication topology that only included servers from our US West Coast data center"
East вообще отвалился что ли
yopp
Линк упал между дц
yopp
Это классический split
Sergei
линк падал на 43 секунды, последняя цитата уже про события после восстановления линка
yopp
yopp
yopp
100% Durability невозможно. Физика запрещает.
yopp
Роллбэк как он сделан в монге, это отличное решение проблемы как у гитхаба
yopp
И потом, где-то нужен высокий уровень гарантий, а где-то нет
yopp
Монга даёт широкий выбор сейчас, под конкретную задачу
yopp
ну и majority в географических кластерах, это долго. был бы у них дц в китае ещё, например :)
yopp
или в сиднее