dt DateTime на который включен ORDER BY dt, а не tuple() то значит ли это, что при выборке реальный порядок событий вставки может нарушиться? Не перетасует эта сортировка одинаковые секунды?
если у вас одинаковое время, то каким образом БД должна понять какой порядок у этих строк? 2021-12-28 18:20:13 2021-12-28 18:20:13 2021-12-28 18:20:13
а ей и не надо понимать ) нужно просто не менять этот порядок ))
а если все 3 записи ушли на 3 разных шарда, в каком порядке данные должны отдаваться обратно?
в том порядке в котором ушли... с учетом конечно задержки на отправку
DateTime MATERIALIZED now()
SQL в общем случае таких гарантий не дает если вставляете в одном insert и на одну реплику и не в distributed Таблицу в которой какщй нибудь sharding_key rand() то оно в один блок попадет скорее всего и на вход конвейера пойдет в том порядке как записалось но потом внутри конвейера что угодно можте произойти
и что это даст?
да это шутка )
задавайте явный порядок на стороне клиента
так на стороне клиента как раз все ок.. боюсь что перепутается при выборке
так пронумеруйте события, добавьте столбец event_num и инкрементируйте его
порядок вставки, можно DateTime64
для одного блока одинаковое время всем записям будет проставлено насколько я понимаю
в блоке, да, нужно вычислять порядок строки
спасибо, в итоге сделал вот такую вычислялку ,__tid Int64 MATERIALIZED toUnixTimestamp64Milli( now64() ) * 1000000 + rowNumberInAllBlocks() ... сейчас еще потестирую на скорость работы
хоть бы объяснили зачем вам "порядок строк" есть сильное подозрение что это не нужено
вдогонку fromUnixTimestamp64Milli(toUnixTimestamp64Milli(now64()) + rowNumberInAllBlocks())
мне нужно хранить события в строгом порядке.. если порядок поменяется, что трудно будет потом понять как и что происходило в реальности ) особенно если это какой-то разбор полетов или отладка сложной ошибки
мне казалось это надо делать на стороне клиента, что если вы вставляете большим куском и КХ разбивает данные на несколько блоков?
К данным прилепите их порядок и все будет круто
вот я и пытаюсь понять.. если он разбивает на блоки.. может он их последовательность вставки нарушить?
Если источников несколько машин Каждый со своим clock И у вас время синхронизировано только через ntp то там порядок только внутри одной машины Для двух может незначительно нарушиться если событий сотни тыщ в секунду
спасибо, это понимаю
Обсуждают сегодня