Size: a a a

2021 February 12

cg

cyrill gorcunov in Tarantool
Sergey Ostanevich
но не вместе. 🙂
нет, не вместе, по одной
источник

VS

Vladislav Shpilevoy in Tarantool
Надо на одном узле
источник

DL

Dmitry Lukovkin in Tarantool
а если не делать вообще схема апдэйт? Что за франкенштейн будет? Т.о. можно и вернуться будет на 1.10?
источник

AT

Alexander Turenko in Tarantool
Dmitry Lukovkin
а если не делать вообще схема апдэйт? Что за франкенштейн будет? Т.о. можно и вернуться будет на 1.10?
Что-то из новых фич, требующих новой схемы, не будет работать.
источник

AT

Alexander Turenko in Tarantool
Навскидку: в SQL функции типа sum будут как бы отсутствовать.
источник

DL

Dmitry Lukovkin in Tarantool
ясно. Это на всякий пожарный. А так да, главное не забыть, что апдейт схемы не делал, а то потом гадать почему не работает что то )))
источник

KO

Konstantin Osipov in Tarantool
Kirill Yukhin
Рассмотрим, какова сложность коммита N синхронных транзакций. Во-первых, достаточно очевидно, что это будет "что-то" * N. Потому что как минимум нужно разбудить файбер каждой закоммиченной транзакции, и саму транзакцию из памяти удалить. Каждую из N. Но каково значение этого множителя "что-то"?

В это значение входит как минимум сборка аков. И собирать их есть два способа. Первый - ак транзакции сразу увеличивает в ней счетчик ack_count. Если видно, что аков у транзакции набралось >= quorum, то коммитим ее. Аков надо собрать quorum штук. Обозначим его Q. Итого, алгоритмическая сложность такого способа: Q. Столько инкрементов ack_count будет сделано на транзакцию.

Тогда такой способ на коммит N транзакций дает сложность O(N * Q). И не важно, приходят подтверждения транзакций пачкой с реплики или нет. В любом случае такой способ подразумевает Q раз увеличить N счетчиков, разбудить N файберов, и удалить N struct txn объектов (раз уж мы тут исходниками кидаемся).

Я подчеркиваю, что Q - это просто ++ в С. Кроме того, Q <= 31, так как это максимальное число реплик в репликасете. В синхронном репликасете их почти всегда будет 3-5.

По такому раскладу я не понимаю, как эти 3-5 инкрементов int переменной в С способны повлиять на что-либо. Особенно в алгоритме, реализация которого вовлекает работу с сетью.


Но есть еще второй способ. Он поможет, если транзакции подтверждаются пачками. Для этого надо вспомнить, что ack пачки транзакций от реплики описывается LSN (наибольший среди подтвержденных транзакций. См статью Влада, кто не понимает.).

Тогда в теории, если нам приходит подтверждение сразу T транзакций, мы можем взять LSN последней, и записать его один в некую структуру данных, которая позволяла бы быстро понять, какой у нас минимальный LSN подтвержденный минимум Q раз. Тогда ack на T транзакций будет состоять из обновления этой одной структуры и проверки, не собрался ли там уже кворум на самую первую транзакцию в очереди.

Тогда коммит N транзакций, если они пришли пачкой со всех реплик (самый лучший случай), будет стоить N * "сложность обновления вот этой структуры данных с LSN-ами".

Что это за структура? Я понятия не имею. Но по требованиям выглядит похоже на binary heap. Только нам надо за O(1) находить не самый меньший элемент, а самый меньший такой, что Q других элементов в этой куче >= него. Допустим, такой алгоритм существует. И обновление такой кучи будет как у любой кучи - O(log(Q)) (я беру Q, так как там всегда будет >= Q элементов).

Тогда самое оптимальное, что можно получить в теории будет O(N * log(Q)). А теперь вспомним, что Q - это обычно 3-5. То есть мы говорим о разнице N * 5 vs N * log(5). Это будет примерно 5N vs 3N. В количестве операций записи в переменную в С. Я тут не беру, что будет еще N побудок файберов и освобождений памяти транзакции, таплов, и тд.

Мне бы очень хотелось увидеть бенч, на котором эти инкременты ack_count на компилируемом языке будут жрать больше, чем апдейт такого вот мифического хипа. На фоне работы с сетью. Измеримо больше.

По поводу ссылки от Кости. Если ее открыть, то там можно увидеть следующее: "insertionSort(srt)". То есть они пошли по второму пути, но вместо некой специальной кучи используют сортированный массив или что-то вроде того. Я не уверен. Что правда будет хуже, чем линейная сложность наверное. Но опять же, мы говорим о 5 vs log(5) примерно. Это ничто.
в etcd одна единственная куча на лидера, а у вас в каждой txn_limbo entry счётчик аков. И 5 нод это если рафт используется только для репликации данных, а если для схемы (системного каталога) то нод будет не 5 а 500.
источник

KO

Konstantin Osipov in Tarantool
Я писал в рассылку пока ещё ни одной строчки кода не было написано - внимательно изучите реализацию etcd. Там все понятно, модульно, задокументировало, покрыто тестами. Там же реализован пресловутый in memory relay. Сделаны configuration Changes. Интересно сколько нужно раз это повторить, или вообще бесполезно...
источник
2021 February 13

КШ

Карен Шахназарян... in Tarantool
Добрый день, коллеги, у меня вопрос по созданию доменной модели данных в авро схеме. Почему автоинкремент ломает все? Как правильно его использовать?
Сообщение об ошибке:
"message": "GraphQL error: property auto_increment of field 'id' for type 'Client' should be boolean, got: string"

на третьем скрине вся доступная документация…
источник

КШ

Карен Шахназарян... in Tarantool
источник

КШ

Карен Шахназарян... in Tarantool
источник

КШ

Карен Шахназарян... in Tarantool
источник

AK

Alexey Kuzin in Tarantool
Напишите true -- сработает?
источник

КШ

Карен Шахназарян... in Tarantool
Alexey Kuzin
Напишите true -- сработает?
нет, та же ошибка
источник

AS

Andrey Syvrachev in Tarantool
Ребят, а никто не делал прям минимальный минимальный Docker образ тарантула (alpine) чтобы весил мегов 10-20 не больше ? Типа as builder .... FROM scratch ?
источник

OU

Oleg Utkin in Tarantool
источник

AS

Andrey Syvrachev in Tarantool
о! спасибо! не хотел делать руками, потому и спросил! Попробую
источник

AS

Andrey Syvrachev in Tarantool
А в чем причина использолвания busybox а не scratch ?
источник

OU

Oleg Utkin in Tarantool
Busybox весит мало и бывает полезно зайти внутрь контейнера
источник

AS

Andrey Syvrachev in Tarantool
76 метров, это библиотеки поели столько?
источник