@pgsql

Страница 467 из 1062
Darafei
08.09.2017
16:36:51
Надо данные смотреть

'256' - три байта, float - 8

А, text

Igor
08.09.2017
16:37:53
один столбец text, говорю же) по идее один-в-один должно быть, ну ладно, с небольшим оверхедом

Google
Igor
08.09.2017
16:38:16
я даже PK убрал на время инсерта

Darafei
08.09.2017
16:39:15
А какой utf у постгреса внутри?

Alexander
08.09.2017
16:39:59
Тоаст, нет?

Igor
08.09.2017
16:40:04
аэыыы, прекрасный вопрос. внутри это где, как можно посмотреть? когда я делал createdb с сишной локалью, он, помню, ругнулся, что шаблон utf8.en_US использует

более задроченный запрос о размере таблицы показывает 8192 toast_bytes

вот этот https://gist.github.com/hatarist/675dc3debf6cf5f825b5c15aed4cbac0

Alexey
08.09.2017
16:41:15
а всё же зависит от среднего размера записи. если там в каждом text лежит по одному символу, так оверхед будет вообще ого-го

Alexey
08.09.2017
16:42:04
оверхед на каджую запись — 28 байт

что в общем уже близко к наблюдаемому

Igor
08.09.2017
16:42:27
опа, а вот и причина, похоже. 100 млн строк

спасибо большое :) и с этим, понимаю, ничего не сделать?

Google
Alexey
08.09.2017
16:43:05
нет

Darafei
08.09.2017
16:46:45
Только cfs от pgpro

Igor
08.09.2017
16:47:07
как раз искал подобную штуку, посмотрел на цену, не искал подобную штуку

Alexey
08.09.2017
16:53:51
но я бы не советовал cfs, если планируется интенсивная нагрузка на запись. я почитал дизайн, сравнил с компрессией в innodb. подозреваю, в cfs всё плохо с обновлениями

Igor
08.09.2017
16:54:10
нене, никакой записи не будет больше, это одноразовая вставка нескольких миллиардов строчек

Alexey
08.09.2017
16:54:27
тогда да

Igor
08.09.2017
16:54:56
мне приходит в голову совершенно сумасшедшая мысль зафигачить кусками в JSONB, а строками, так скажем, партицировать, ггг

но это как-то слишком упорото, наверное

Darafei
08.09.2017
16:59:15
cstore_fdw глянь

Igor
08.09.2017
17:01:03
спасиб, что-то не подумал

Айтуар
08.09.2017
18:03:28
приложений может быть множество, синхронизировать между приложениями эти данные запарно
А что сложного? Взял nosql БД, например redis, и кешируй там сколько хочешь и как хочешь, и доступ из разных приложений можешь сделать и кластер.

Darafei
08.09.2017
18:04:43
понимаешь, проблема в том, что это всё равно база данных, а хранить в базе, как мы поняли, религиозно не хочется

Mikhail
08.09.2017
19:22:14
понимаешь, проблема в том, что это всё равно база данных, а хранить в базе, как мы поняли, религиозно не хочется
Да нет же! Не хочется идти по индексу, а получить данные как из хеш таблицы, но при этом не делать это руками :)

Darafei
08.09.2017
19:22:35
ага. а чем индекс отличается от хеш таблицы?

Mikhail
08.09.2017
19:23:38
в моем случае

я а хочу свести их к одной

таким образом

Darafei
08.09.2017
19:24:50
ага. и чем хеш по трём колонкам отличается от индекса по трём колонкам?

Mikhail
08.09.2017
19:25:45
ага. и чем хеш по трём колонкам отличается от индекса по трём колонкам?
хеш будет не по трем колонкам. Грубо говоря бд увидит тот запрос, который уже выполнялся. Например путем вычисления хеш функции по всему запросу

Google
Mikhail
08.09.2017
19:25:58
ну это хотелка, а не как оно в реальности :)

Darafei
08.09.2017
19:26:25
как выглядит структура данных, в которой ты хочешь это хранить?

Mikhail
08.09.2017
19:28:00
как выглядит структура данных, в которой ты хочешь это хранить?
да пусть даже как хеш таблица. Это может выглядеть так. БД может применить хэш функцию по запросу, и если увидет, что такой уже есть, вернет значение заранее записанное, а не будет лезьт по индексам

по трем колонкам

Darafei
08.09.2017
19:29:03
отлично. где этот хеш лежит? как он аллоцируется? как он деаллоцируется? как он синхронизируется между процессами? как он синхронизируется между репликами?

как в этом хеше считается ключ?

Mikhail
08.09.2017
19:30:02
отлично. где этот хеш лежит? как он аллоцируется? как он деаллоцируется? как он синхронизируется между процессами? как он синхронизируется между репликами?
Я без понятия, я спросил есть ли какой то механизм в постгресе для этого :) Но по идее можно это самому запилить

Darafei
08.09.2017
19:30:17
механизм есть, называется "индексы"

Mikhail
08.09.2017
19:30:19
Т.е. придумать хеш функцию по переменным в запросе и все

Darafei
08.09.2017
19:30:45
но ты вместо подумать и соотнести говоришь "без понятия", не надо так

вдруг ты можешь адекватно ответить на эти вопросы, а кто-то тут возьмёт и запилит такое

или окажется, что ты придумал shared_buffers

Igor
08.09.2017
20:42:55
Всем привет, а может кто-то подсказать, можно ли определить в postgres стратегию поведения, в случае, если primary key имеет дефолтное значение, вступающее в коллизию с другим существующим?

Ilya
08.09.2017
20:45:52
duplicate key error будед

потому я порой предпочитаю отказаться от дефолтных автоинкрементных ключей

Igor
08.09.2017
20:50:38
О'кей. Тогда еще вопрос, если я использую UUID тип для Primary ключа, и хочу генерить его с помощью DEFAULT uuid_generate_v1mc(), у меня может быть коллизия, или же postgre гарантирует их отсутствие?

Просто дико западло переписывать весь SQL из-за возможности коллизий в этом месте :)

Ilya
08.09.2017
20:59:10
там нет гарантий.

ты для начала почитай как оно работает

там вероятность совпадения очень мала + там в уид таймстемп входит

Google
Ilya
08.09.2017
20:59:50
чтобы в 1 момент так влететь....

но гарантий нет

(:

но все юзают. ибо вероятность <censored> мизерная

Igor
08.09.2017
21:03:05
А способ в рамках СУБД отловить коллизию и перегенерить есть?

Ilya
08.09.2017
21:03:47
https://www.postgresql.org/docs/9.6/static/errcodes-appendix.html

Igor
08.09.2017
21:05:07
Ну, это то понятно. А внутри никакой возможности отлавливать конфликты нет?

Алексей
08.09.2017
21:05:23
А почему бы не использовать uuid v4?

Igor
08.09.2017
21:06:51
Если правильно понимаю - v1mc должен быстрее вставляться.

и поиск соответственно быстрее работать.

Алексей
08.09.2017
21:08:25
Мне эти выводы кажутся странными. Возможно что-то недопонимаю.

Ilya
08.09.2017
21:08:30
Алексей
08.09.2017
21:09:10
А он нужен?

Основная задача, если я правильно понял - исключить возможные "коллизии", не так ли?

Ilya
08.09.2017
21:10:45
ну как. ноды на которых генеришь

это удобно

по ключу можно увидеть с какого конца его сгенерило

или тебе циферка версии повыше душу греет?

Алексей
08.09.2017
21:12:57
Мне душу греет большая степень рандомности, ибо задача ставилась именно такая.

А если жизненно необходима информация о ноде - пожалуйста, в отдельное поле. А иначе выходит как -то, что мы в uuid хотим запихнуть и имя ноды, и время генерации, но при этом желаем, чтобы он был рандомным и уникальным.

Google
Алексей
08.09.2017
21:15:53
Не, я не специалист, просто рассуждения вслух. Возможно я в корне заблуждаюсь.

Ilya
08.09.2017
21:16:29
ну как. идея с отдельным полем тоже здравая.

Алексей
08.09.2017
21:19:04
и поиск соответственно быстрее работать.
А вот это мне вообще никак не понять. Если скорость вставки еще можно как-то объяснить, типа дольше генерится UUID (хотя что-то мне подсказывает, что разница там абсолютно мизерная), то уж скорость поиска никак не объяснима.

Алексей
08.09.2017
21:22:45
Ага, вот теперь понятно.

Ilya
08.09.2017
21:27:19
но вообще uuid это не о больших вставках

Igor
08.09.2017
21:32:05
но вообще uuid это не о больших вставках
Слишком я привык к UUID, и слишком много кода написал в приложении уже, чтобы рыться там и менять все на сраный Long/Integer ;)

Denis
08.09.2017
21:36:58
Слишком я привык к UUID, и слишком много кода написал в приложении уже, чтобы рыться там и менять все на сраный Long/Integer ;)
Осторожнее, я помню последнюю битву приверженцев uuid и bigserial в этом чате. Вы играете такими комментариями с огнём)

Igor
08.09.2017
21:40:20
Осторожнее, я помню последнюю битву приверженцев uuid и bigserial в этом чате. Вы играете такими комментариями с огнём)
Хех, ну, ничего плохого про Integer/Serial не говорю, я только про то, что переписывать на них для меня уже непосильный труд, и придется в незасимости от плюсов/минусов остаться на UUID. А так варианты то каждому под свои цели разные будут.

Алексей
08.09.2017
21:43:42
да, вставка будет быстрее.
Это может показаться странным, но вот я сейчас провел несколько тестов - v1 на вставке проигрывает v4 10 млн записей v1mc вставляет 75-76 секунд, v4 - 56-57 секунд Результат стабилен на нескольких прогонах. Правда эксперимент все же нельзя назвать "чистым", вставка в пустую таблицу вообще без индексов, возможно с индексами результат будет другим. Сейчас и это проверим.

C первичным ключом по uuid v1mc - 107-114-108 секунд v4 - 123-123 -118 секунды Да, при вставке в индекс v4 действительно немного проигрывает. Хотя я бы и не назвал эту разницу существенной. В любом случае, во всех тестах "коллизий" замечено не было

Raracas
08.09.2017
23:45:30
https://telegram.me/telegidka — самые полезные и интересные каналы на просторах Телеграм. Присоединяйся.

Denis
08.09.2017
23:51:27
Так, кто там искал злобных админов на востоке, которым только выдай банхаммер? Я почти готов карать спамеров

Страница 467 из 1062