
Yaroslav
10.08.2018
14:44:34

Andrei
10.08.2018
14:44:45
)))
сериал и так бигинтом подперт изнутри)
все, всем хороших выходных)

Google

Fike
10.08.2018
14:45:07

Yaroslav
10.08.2018
14:46:15

Denis
10.08.2018
14:47:55
этот риск я принял, но сообщение было в контексте применения непоследовательных идентификаторов, когда вроде их использования никак не избежать

Fike
10.08.2018
14:48:26
там нет алгоритмов наугад, там спека все довольно четко описывает

Yaroslav
10.08.2018
14:48:33

Fike
10.08.2018
14:48:45

Andrei
10.08.2018
14:49:52
Не обязательно на клиенте
Ещё раз говорю

Fike
10.08.2018
14:50:19
А зачем его генерировать в базе?

Yaroslav
10.08.2018
14:50:19

Andrei
10.08.2018
14:50:28
Был опыт разрушившая запарка размером 2тб, построенного на uuid
Если хотите ходить по граблям - вперед
Все на первых этапах красиво

Google

Fike
10.08.2018
14:51:11
ой, ну давайте без аргументации "на моей машине" и "сами не понимаете, во что вступаете"

Andrei
10.08.2018
14:52:32
Uuid - тупиковая идея построения реляционной нормализованной модели жанных

Yaroslav
10.08.2018
14:52:36
уид-то на клиенте генерируется
А в базу-то вставляется. А что при этом происходит, Andrei Shmigiro уже написал.
И, кстати, это ещё не всё, кажется... перечитаю.

Andrei
10.08.2018
14:52:38
*данных

Fike
10.08.2018
14:52:59
beat this ?

The
10.08.2018
14:53:28
When you need to shard your table, the autoincrementing is is a bottleneck across all shards as you need to hold a lock on it when incrementing. In fact, that's exactly how it's implemented explicitly in POSTGRES.
мимо вычитал

Yaroslav
10.08.2018
14:54:30

Fike
10.08.2018
14:54:57
так может мы выиграем за счет уидов ???

Yaroslav
10.08.2018
14:55:24

Fike
10.08.2018
14:56:20
ладно, давайте просто сойдемся на том, что это две модели с не очень коррелирующими бенефитами

Yaroslav
10.08.2018
14:56:56
ладно, давайте просто сойдемся на том, что это две модели с не очень коррелирующими бенефитами
Только вот, что касается "полной" производительности, выиграть UUID-ам — конкретно, v4, и именно в PostgreSQL, на практике (почти наверняка) не удастся ни разу. ;)
И, ещё раз, я так и не понял, зачем они нужны в "обычной" базе (не распределённой)?

Fike
10.08.2018
15:00:11
потому что все очень легко параллелится

Yaroslav
10.08.2018
15:00:28

Fike
10.08.2018
15:01:12
у вас данные-то в большинстве таблиц сильно больше будут весить, чем оверхед на 64 бита

Yaroslav
10.08.2018
15:01:18

Fike
10.08.2018
15:01:19
кажется не сошлись все-таки

Google

Fike
10.08.2018
15:01:30
When you need to shard your table, the autoincrementing is is a bottleneck across all shards as you need to hold a lock on it when incrementing. In fact, that's exactly how it's implemented explicitly in POSTGRES.
локи всегда зло
а здесь они нинужны

Yaroslav
10.08.2018
15:02:03

Fike
10.08.2018
15:02:24
вот же, положила
> выиграть UUID-ам — конкретно, v4, и именно в PostgreSQL, на практике (почти наверняка) не удастся ни разу. ;)
ладно, я серьезно не вижу смысла дальше обсасывать

Yaroslav
10.08.2018
15:04:07

Fike
10.08.2018
15:04:33

Yaroslav
10.08.2018
15:06:14

The
10.08.2018
15:06:14
я не шарю, но вроде uuid при логической репликации решают много проблем
если мастер мастер?
или я не прав?

Fike
10.08.2018
15:07:55


Yaroslav
10.08.2018
15:07:59
То есть я считаю, что бремя доказательства лежит на утверждающем. И что все зависит от конкретного кейса, потому что боттлнек может быть в разном, в т.ч. в сиквенсе.
> То есть я считаю, что бремя доказательства лежит на утверждающем.
Не, ну это тоже черечур...
Есть общепризнанные факты, и доказывать, что Земля круглая, мне как-то не захочется.
И, опять-таки, давайте опеределимся, Вы хотите доказательства несуществования таких случаев?
Если да, я могу хоть тысячи обратных привести, и Вы будете с полным правом говорить, что я исчерпал не все. :(
Я утверждаю только то, что общая производительность вставки (в которой какие-то lock-и на sequence-ах, по идее, просто ничто по сравнению с другими элементами), почти всегда будет ниже.
Если Вам нужны доказательства/обоснования этого утверждения, можно поискать...


Fike
10.08.2018
15:15:02
Да мне все равно на самом деле. Просто "ну вы же понимаете, что Х" это вообще не аргумент.

Yaroslav
10.08.2018
15:16:47

Fike
10.08.2018
15:17:28
Нет, не нужны, мне просто было интересно подискутировать, времени реально гонять бенчмарки у меня нет, хотя это было бы действительно очень интересно.

The
10.08.2018
15:18:35
https://www.cybertec-postgresql.com/en/int4-vs-int8-vs-uuid-vs-numeric-performance-on-bigger-joins/
вот есть такой бенчмарк

Google

Yaroslav
10.08.2018
15:20:29

Fike
10.08.2018
15:21:26
давайте опять же не будем сводить все к записям
тем более что Let’s assume we have a simple table with primary key, either a BIGSERIAL or UUID выглядит как "у нас в таблице нет данных, кроме айдишника"

Yaroslav
10.08.2018
15:26:52

Fike
10.08.2018
15:30:32
Извините, я не готов верить таким бенчмаркам. Должна быть гипотеза, должно быть обоснование, должна быть проверка на наличие признаков, опровергающих гипотезу, "мы оставили сервак погреться на час" где-то в интернетах тоже все-таки так себе

Yaroslav
10.08.2018
15:32:40

Fike
10.08.2018
15:33:26
там нет гипотезы

Admin
ERROR: S client not available

Fike
10.08.2018
15:33:47
гипотеза - это "если мы сделаем Х, то должны увидеть Y, потому что будет эффект Z"
И ссылки на то, как его зарепродюсить (я имею в виду исходники теста), тоже нет
Оно все может быть так. Уиды могут быть абсолютно бесполезны. Я сейчас просто говорю о том, что нельзя вытащить просто первое утверждение из интернета, которое совпадает с нужным мнением, и апеллировать им, как и "ну вы же сами понимаете" и подобными конструкциями.
За сим все-таки закончу.


Yaroslav
10.08.2018
15:36:20
Оно все может быть так. Уиды могут быть абсолютно бесполезны. Я сейчас просто говорю о том, что нельзя вытащить просто первое утверждение из интернета, которое совпадает с нужным мнением, и апеллировать им, как и "ну вы же сами понимаете" и подобными конструкциями.
Да, отчасти оно так... тут только на репутацию 2ndquadrant, и конкретно, Tomas Vondra можно ссылаться.
А гипотеза такая: "если мы будем писать случайные ключи в b-tree, вставки будут попадать на случайные листы (и таки да), и, следовательно, те из них, которые не были записаны с последнего checkpoint-а, дадут FPW."
И, с виду, похоже.

The
10.08.2018
15:44:42
5 мс. на 500к артикулов, с лимит 30
это во время записи конкуррентной если что

Yaroslav
10.08.2018
15:46:16

The
10.08.2018
15:46:27
500к артикулов сейчас

Yaroslav
10.08.2018
15:47:14
А я забыл, сколько должно было быть. ;)
А размер базы какой на данный момент (просто любопытно)?

The
10.08.2018
15:47:56
404 MB |

Google

The
10.08.2018
15:48:12
должно быть около 3к артикулов, это максимум

Yaroslav
10.08.2018
15:48:50

The
10.08.2018
15:48:56
да.
вот запрос с джойном: https://explain.depesz.com/s/uREW
SELECT sps.id FROM shop_product_sku AS sps INNER JOIN shop_product_sku_offer spsf ON spsf.sku_id = sps.id WHERE EXISTS (SELECT 1 FROM shop_feature_brand_sku AS sfb WHERE sfb.sku_id = sps.id AND sfb.feature_value_code = 'xiaomi') AND EXISTS (SELECT 1 FROM shop_feature_cores_sku sfcs WHERE sfcs.sku_id = sps.id AND sfcs.feature_value_code = 2) AND EXISTS (SELECT 1 FROM shop_feature_ram_sku sfrs WHERE sfrs.sku_id = sps.id AND sfrs.feature_value_code = 4096) ORDER BY spsf.price DESC LIMIT 30;
но сдается мне что с ним что-то не так

Yaroslav
10.08.2018
15:53:16

The
10.08.2018
15:53:27
4 дня работаю с postgres

Yaroslav
10.08.2018
15:54:41
4 дня работаю с postgres
А до этого с чем работали из СУБД (может, у нас опыт пересекается, было бы легче советовать...)?

The
10.08.2018
15:55:20
работал с MySQL, но тоже не долго. я как разработчик больше, а не как DBA

Yaroslav
10.08.2018
16:00:10
Не пересекается, значит. ;)
Тогда, очень грубо, можно запомнить такое правило:
PostgreSQL не любит "идиотских" запросов. ;)
При этом, идиотскими считаются: недетерминированные (как в Вашем случае, на одних и тех же данных результат может быть разный); те, в которых есть что-то лишнее (например, "WHERE a= b OR false" <- вот этого "OR false" быть не должно);
И т.д. и т.п.
К тому же, при наличии нескольких способов сделать что-то, лучше "ходить, как все ходят".
(Всё это обусловлено не только отношением PostgreSQL hackers к пользователям, как Вы могли бы подумать, но и архитектурой планировщика.) :)

The
10.08.2018
16:04:42
нет, не должно
значит буду учиться писать не идиотские запросы
но я не совсем понял почему выборка там недетерминированная
а ну да, кажется понял.

Yaroslav
10.08.2018
16:05:47
значит буду учиться писать не идиотские запросы
Ну да, звучит грубо... но помогает! :)
Вы отпишитесь, когда догенерируется... во время интенсивной заливки данных база у Вас совсем не в том режиме, что будет в production, к тому же, лучше бы ещё попробовать добавить (изменить) индексы.

The
10.08.2018
16:09:40
спасибо за дискуссию) я отпишу как будет примерный ожидаемый объем данных.