184 похожих чатов

Ребят, привет еще раз! У меня беда с Join Engine'ом Может, кто

прошарен

Есть таблица Replacing MT с колонками hash(PK), v1, v2 (by default '')

Есть Join- таблица - otc_join
С этими значениями, соединяем по hash

Сначала заполняю v1:

ALTER TABLE transactions update v1 = joinGet('otc_join', 'v1', hash)
WHERE type = ''

а потом, второй:

ALTER TABLE transactions update v2 = joinGet('otc_join', 'v2', hash)
WHERE v1 = 'otc' and v2 = ''


И вот беда в том, что в целом оно работает, но постоянно процедура "застревает" и либо v1 блочится, либо v2

И следующий раз процедура не сработает вообще и приходится все время использовать

kill mutation where not is_done;

В чем может быть дело? Как я могу сделать код стабильным?

Всем неравнодушным большое спасибо!

7 ответов

3 просмотра

а вы дожидаетесь конца предыдущей мутации?

Al-Kul Автор вопроса
Konstantin Ilchenko
а вы дожидаетесь конца предыдущей мутации?

Ммм, видимо нет Но ведь изменение двух разных колонок, разве должно одно блочить другое? Не совсем понимаю, как оно под капотом А если дело в этом, как мне это обойти? Дело в том, что этот код запускается в цикле через драйвер, неужели запускать sleep и проверку, что мутаций незаконченных нет?

Al Kul
Ммм, видимо нет Но ведь изменение двух разных коло...

а как часто вы запускаете? мутации не предполагают что вы их будете в своей бизнес логике распихвать по коду, а только разовые ручные запуски есть настйрока mutations_sync, которая позволяет дожидаться конца мутаций

Al-Kul Автор вопроса
Konstantin Ilchenko
а как часто вы запускаете? мутации не предполагают...

Довольно часто, но интервалы где-то по 10 минут Дело в том, что у меня таблица ок 800млн записей И мне надо заполнить колонки прямо в ней, скажем type и change И если где-то это просто Alter table type … Where … То для некоторых записей там нужно бахнуть нехилый подзапрос: change, например, вообще не из этой таблицы достаю Так вот я сделал так Я иду в цикле, забирая из моей таблицы подряд 1млн записей, вычисляю для них change и type, кидаю полученные значения в join таблицу вместе с hash, по которому джоиню потом Ну и потом через эту временную таблицу пришиваю вычисленные значения и двигаюсь дальше А Как иначе это следует делать, и почему этот вариант плох, помимо вот этих зависающих мутаций?

Al Kul
Довольно часто, но интервалы где-то по 10 минут Де...

ну это просто путь в никуда, вангую что вы наделали этих мутаций и они у вас зависают не из-за разных колонок, а потому что они не успевают за 10 минут пройти. Вы просто насилуете ваш сервер и всё, ничего хорошего не получится. Переделываете вашу схему чтобы не надо было обновлять данные, или обновление было максимум раз в сутки например

Al-Kul Автор вопроса
Slach [altinity]
или ReplcacingMergeTree + SELECT .. FROM table FIN...

Можете, пожалуйста, чуть подробнее?)

Похожие вопросы

Обсуждают сегодня

Ребят в СИ можно реализовать ООП?
Николай
33
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
core\config\database\connections\default.php На всякий случай проверь всё же файл <?php return [ 'driver' => env('DB_TYPE', 'mysql'), //$database_type 'host' => env('D...
Andrey K
2
Всем доброго вечера. Разрабатываю 32 раз. приложение в Delphi. Столкнулся с тем, что стандартный  TFilestream  не работает с большим файлом > 2 ГБайт (после вызова функции see...
Vadim Gl
16
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
добрый день. Подскажите, есть сайт на 1.4.7 и я хочу обновиться, особо ничего не меняя. мне выбирать версию 1.4.35 или третью ветку? и можно ли обновлять "как есть", или нужно...
Digital Cat
12
народ, плиз хелп, всю голову сломал себе уже... разве может быть так, что GetProcAddress( GetModuleHandle( "kernel32.dll" ), "SetThreadDescription" ) вернёт ненулевое значение...
Iluha Companets
12
Кто кодит под Лазарем на винде, у вас аналогично VCL переопределяются CreateWnd и CreateParams для конкретных классов контролов и все заданные флаги влияют?
А Андрей
11
У меня задача: написать брокер сообщений. Очереди и потребители. Очереди поддерживают приоритеты. Очередь отдает сообщения, только обработчикам с соответствующими характеристи...
Aleksandr Filippov
2
Карта сайта