Size: a a a

2020 August 31

A

Artur in ctodailychat
Alex
ага, и кнопка "у вас все заеб*сь" ))
я бы хотел такую кнопку иногда. и не только на работе
источник

A

Alex in ctodailychat
"сделать хорошо")
источник

AR

Anton Revyako in ctodailychat
Alex
"сделать хорошо")
ненене. сделать - задача человека. ответственность на кожаном мешке. мне такая ответственность нафиг не нужна )))
источник

AR

Anton Revyako in ctodailychat
тот самый единсвенный конкурент умеет сам запросы переделывать... лучше бы даже не начинал...
источник

AR

Anton Revyako in ctodailychat
а то так до страшного может дойти. встроить оптимизатор запросов в какой-нибудь прокси )))
источник

M

Mikhail in ctodailychat
А чем на маке мерять обрывы сети или просто лагающий коннект? Помню очень давно тут мелькала утилита
источник

ء

ءlinjan in ctodailychat
Mikhail
А чем на маке мерять обрывы сети или просто лагающий коннект? Помню очень давно тут мелькала утилита
mtr,  tcpdump?
источник

AR

Anton Revyako in ctodailychat
помните, кстати, историю про сортировку uuid в java vs postgres?
как-раз для любителей в приложении сортировать )
источник

ء

ءlinjan in ctodailychat
Mikhail
А чем на маке мерять обрывы сети или просто лагающий коннект? Помню очень давно тут мелькала утилита
счетчики ошибок и коллизий из ifconfig
источник

AR

Anton Revyako in ctodailychat
Telegram
Типа крутой бэкендер
Сравнение UUID

Есть два UUID'a:
1) 898b178f-f694-4a78-ac20-3f5c6ab55e77
2) 2eb2c8db-e826-4424-8287-aae6f8d3b8c7

Как думаете, если их сравнить в Java (через стандартный компаратор) и в PostgreSQL - результат будет одинаковый? Проверим?

Java (Kotlin):
first.compareTo(second)

PostgreSQL:
select (:first)::uuid > (:second)::uuid

Результаты:
Java вернет -1, т.е первый меньше второго
PostgreSQL вернет true, т.е первый больше второго

Надеюсь, это избавит кого-то от 4 часов дебага. Проблему нашли, но легче не стало. Давайте разбираться, почему так получилось и кто прав.

Идем в исходники PostgreSQL, находим там метод uuid_internal_cmp, видим что он вызывает C'шный memcmp и сравнивает байтики обоих uuid'ов. Выглядит логично.

Идем в исходники Java. Сначала стоит обратить внимание на то, как в UUID'е хранятся данные.
public final class UUID {
 private final long mostSigBits;
 private final long leastSigBits;
}

Смотрим реализацию метода compareTo(). Копипастить код сюда не буду, покажу лишь коммент:
// The ordering…
источник

AR

Anton Revyako in ctodailychat
Alex
order by может спровоцировать использование не того индекса.

100500 раз видел, как запрос возвращающий 2 строчки летает, добавили order by - стал тупить по 10 минут.

прям классический кейс.
ксттаи, тут все еще более холиварное продолжение ) есть настоятельная рекомендация всегда указывать LIMIT, на тот случай, если случайно запрос вытащит 100k строк (корорые, очевидно, в 99% приложений не нужны), чтобы не заблотать сеть. Т.е. база в этом случае все-равно напряжется, но сеть и оператива в приложении не пострадают.

НО! если ты указываешь LIMIT, то порядок сортировки внезапно становится критически важен )
источник

AR

Anton Revyako in ctodailychat
я тут подумал... может сделать 2 правила.
- если возвращается serial/identity или поля date-типов, то выводить warning про сортировку
- в прочих случаях notice
источник

A

Alex in ctodailychat
Anton Revyako
ксттаи, тут все еще более холиварное продолжение ) есть настоятельная рекомендация всегда указывать LIMIT, на тот случай, если случайно запрос вытащит 100k строк (корорые, очевидно, в 99% приложений не нужны), чтобы не заблотать сеть. Т.е. база в этом случае все-равно напряжется, но сеть и оператива в приложении не пострадают.

НО! если ты указываешь LIMIT, то порядок сортировки внезапно становится критически важен )
"заблотать сеть" - это какой-то очень маловероятный исход.

если есть риск ее заблотать - заблотится сначала диск, который в облаке - по сети
источник

A

Alexander in ctodailychat
Mikhail
А чем на маке мерять обрывы сети или просто лагающий коннект? Помню очень давно тут мелькала утилита
это смотря что вы хотите измерять … https://backdrift.org/tcp-ping-ping-tcp-port и mtr для начального анализа
источник

VK

Vadim Kotov in ctodailychat
Anton Revyako
помните, кстати, историю про сортировку uuid в java vs postgres?
как-раз для любителей в приложении сортировать )
Я только не понял, когда может понадобиться сортировать по uuid?
источник

AR

Anton Revyako in ctodailychat
Alex
"заблотать сеть" - это какой-то очень маловероятный исход.

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

AR

Anton Revyako in ctodailychat
Vadim Kotov
Я только не понял, когда может понадобиться сортировать по uuid?
когда это uuid v1
источник

A

Alex in ctodailychat
Anton Revyako
и да и нет. если у тебя один и тот же запрос выполняется много раз (каталог товаров выводится на индексе), то таблица будет лежать в кеше, а по сети будет летать каждый раз целиком
камон

"давайте всегда писать limit/top" потому что есть риск заблотать сеть" - ты серьезно?)
источник

AR

Anton Revyako in ctodailychat
Alex
камон

"давайте всегда писать limit/top" потому что есть риск заблотать сеть" - ты серьезно?)
это не я ) это уважаемые dba )
источник

VK

Vadim Kotov in ctodailychat
Значение v1 зависит от времени, ок. Но всё равно непонятно, какой валидный кейс для сортировки. Uuid - уникальный идентификатор, для чего полагаться на то, что можно с внятным результатом по нему что-то можно отсортировать?
источник