@pgsql

Страница 638 из 1062
Dmitriy
18.01.2018
13:43:27
Нет

По-этому я и не стану ломать то, что сейчас хорошо работает

преждевременная оптимизация - антипаттерн)

Аггей
18.01.2018
13:44:46
Ну я полагаю, что @dmitriy_vasilyev , хочет отсечь историю в будущем... типа хранить надо, но оперативно не нужна

Google
Dmitriy
18.01.2018
13:45:07
да какраз таки бывает нужна

Аггей
18.01.2018
13:45:21
Dmitriy
18.01.2018
13:45:29
ну в принципе да

Yaroslav
18.01.2018
13:46:09
преждевременная оптимизация - антипаттерн)
Я к тому, что при использовании данных запросов и индексов партиционирование Вам не поможет увеличить производительность и с pg_pathman, и с v11... и вообще никогда. ;)

Dmitriy
18.01.2018
13:47:12
значит буду с одной толстой табличкой

kino
18.01.2018
13:53:41
только ссылка не про тип set
https://dev.mysql.com/doc/refman/5.7/en/set.html

Alexey
18.01.2018
13:54:03
да

kino
18.01.2018
13:55:10
да
куда копать?

Yaroslav
18.01.2018
13:55:51
куда копать?
А Вам зачем? Почему бы не сделать дополнительную таблицу, как обычно?

Alexey
18.01.2018
13:56:32
куда копать?
в stackoverflow. я за пару минут нашёл несколько решений. вот это, например: https://stackoverflow.com/questions/8424283/convert-mysql-set-data-type-to-postgres

solakkie
18.01.2018
13:59:04
Начальник погрузился в задачу то?

Google
Yaroslav
18.01.2018
13:59:33
начальник сказал
Ну вон массивы, как выше пишут. Скорее всего, Вам это ещё выйдет боком (как и большинство нереляционных моделей в RDBMS)... но дело Ваше.

kino
18.01.2018
14:00:50
задача сделать мульти enum с защитой от дурака как пример привели set

Yaroslav
18.01.2018
14:01:11
а это как через доп таблицу
Например: item_colors(item_id NOT NULL REFERENCES item, color_id NOT NULL REFERENCES color, PRIMARY KEY(item_id, color_id)).

задача сделать мульти enum с защитой от дурака как пример привели set
Не выйдет —- дурак уже просочился, прямо в постановке "задачи". ;)

kino
18.01.2018
14:05:17
значит я дурак,мне просто выдали структуру в типах mysql и мне надо сделать порт по постгрес,я прочел про set и сформулировал так

Yaroslav
18.01.2018
14:06:50
значит я дурак,мне просто выдали структуру в типах mysql и мне надо сделать порт по постгрес,я прочел про set и сформулировал так
Ну так почему не сделать обычное решение, вместо использования костылей на массивах?

kino
18.01.2018
14:08:21
обычное,это через внешний таблицу?

Yaroslav
18.01.2018
14:09:43
обычное,это через внешний таблицу?
Да. У Вас же эти set-ы привязаны к чему-то (т.е. как в item_colors, например), правильно?

kino
18.01.2018
14:10:08
да

тоесть значения предопределены

Yaroslav
18.01.2018
14:13:18
тоесть значения предопределены
Нет, я имею в виду, это же не просто таблица с множествами, например, цветов "просто так", а они к чему-то привязаны, например, это возможные цвета товаров, так?

Yaroslav
18.01.2018
14:21:09
нет,не привязаны
Хмм... а в чём тогда смысл? Можете таблицу показать?

kino
18.01.2018
14:23:05
это даже не таблмца,а просто описание

Yaroslav
18.01.2018
14:24:15
это даже не таблмца,а просто описание
И в чём смысл описания-то?

kino
18.01.2018
14:35:15
И в чём смысл описания-то?
<sydctl: в транках SET, там возможно одновременно несколько вариантов

Andrey
18.01.2018
14:50:56
А по-моему, не могут. Покажете, как?
Конечно. Только что проверил с таблицей, которую описал @dmitriy_vasilyev на 10 млн записях. Время выполнения запроса получилось 150 мс без партиций против 28 мс с партициями. Могу скрипт сбросить )

Google
Andrey
18.01.2018
14:57:06
Запрос мой?
Запрос выбирает данные за произвольный интервал в ~ 30000 трок из 10 млн. Если добавить условие на IP он будет вообще выполняться около 2 мс.

Dmitriy
18.01.2018
14:58:09
У меня выборки обычно сильно меньше))

Dmitriy
18.01.2018
14:58:52
Коллеги, зарание простите за холивар)

Yaroslav
18.01.2018
15:06:39
Запрос выбирает данные за произвольный интервал в ~ 30000 трок из 10 млн. Если добавить условие на IP он будет вообще выполняться около 2 мс.
"select * from flowlog where timestart > 1538056249 and timestart < 1538156249;" Ну и причём здесь _вообще_ исходный запрос? Вы абсолютно ничего не продемонстрировали, извините.

Andrey
18.01.2018
15:09:50
"select * from flowlog where timestart > 1538056249 and timestart < 1538156249;" Ну и причём здесь _вообще_ исходный запрос? Вы абсолютно ничего не продемонстрировали, извините.
Человек писал: "Задача такакя: дается ip и период. Мне нужны все записи, которые попадают в заданный интвервал. timestart - timeend. И при этом timeend может быть = 0, типа сессия активна". В запросе выбираются записи, попадающие в интервал. Ничего не продемонстрировали вы, потому что даже поленились проверить свою гипотезу.

Просто у меня в условие одно поле для простоты. Позже могу сделать как у него, мне не сложно. Уверен, результат будет тот же.

Andrey
18.01.2018
15:11:28
Возможно. Я ему тоже скрипт отправил. Если не так понял, надеюсь, он поправит )

Yaroslav
18.01.2018
15:18:16
Жду ваш тест )
А Вы его запрос пробовали? Вот такой, например: SELECT to_timestamp(timestart)::timestamp without time zone as timestart, to_timestamp(max(timeend))::timestamp without time zone as timeend, insideip as internalip, outsideip as externalip, startport, endport FROM flowlog WHERE (timeend = 0 OR timeend >= $tf) — time_from AND timestart <= $tt — time_to AND insideip = '$ip'::inet GROUP BY timestart, insideip, outsideip, startport, endport ORDER BY timestart, insideip, outsideip;

Dmitriy
18.01.2018
15:22:11
Могу боевой запрос отправить

Данных боевых накидать не смогу. До понедельника табу на любые работы

Yaroslav
18.01.2018
15:24:50
Могу боевой запрос отправить
Я думал, что это он и есть... нет? Кстати, а сколько у Вас строк по одному insideip (или outsideip) в таблице, в среднем (или MIN/MAX)?

Dmitriy
18.01.2018
15:27:32
Только это завтра

Google
Dmitriy
18.01.2018
15:28:32
Тут прям коса на камень

Yaroslav
18.01.2018
15:30:59
Ну я про то, что вместо переменных будут строчки данными
Да это ясно... Так всё же, что с распределением? Потому что в присланном мне @pensnarik script-е получается максимум записи по три...

Dmitriy
18.01.2018
15:31:21
Там по разному бывает

Бывает много инсайдов в один оутсайд

Минимум 0

Andrey
18.01.2018
15:32:23
Да это ясно... Так всё же, что с распределением? Потому что в присланном мне @pensnarik script-е получается максимум записи по три...
В нем вообще нет ограничения на ip, так как условие по диапазону уже довольно сильно ограничивает выборку.

Yaroslav
18.01.2018
15:32:34
Там по разному бывает
_Максимум_ 3 записи _вообще_ на один inside —- это похоже на то, что бывает у Вас? Если нет, этот script малопригоден для reproduce, в общем-то...

Dmitriy
18.01.2018
15:33:08
Нет. 3 инсайда может быть в один аутсайд

Вообще, есть. Вот оно: AND insideip = '$ip'::inet
Ну тут и аутсайд может быть

Andrey
18.01.2018
15:33:31
Dmitriy
18.01.2018
15:33:36
По этому 2 индекса

Yaroslav
18.01.2018
15:34:22
Нет. 3 инсайда может быть в один аутсайд
Да причём тут это... всего записей сколько? Т.е. сколько сессий за _всю историю_ на один insideIP? "Максимум 3" похоже на правду?

Yaroslav
18.01.2018
15:35:00
Dmitriy
18.01.2018
15:35:30
Ща напишу

Yaroslav
18.01.2018
15:36:03
Я про свой запрос.
Да, там условия нет. Только вот он совсем про другое...

Dmitriy
18.01.2018
15:39:31
Есть один аутсайд. В него могут до 4х уникальных инсайдов попасть. На каждый инсайд дается блок 16к портов. 32 порта микроблок для инсайда. Вот если инсайд израсходовал первые 32 порта, ему дается еще один микроблок. Т.е. минимум ноль, максимум: 4 инсайда в один аутсайда. На каждый инсайд будет от 1 до 16к/32 микроблоков.

Каждый микроблок это запись

Google
Andrey
18.01.2018
15:40:54
Кстати, для номера порта лучше smallint использовать.

Dmitriy
18.01.2018
15:41:11
Там диапазон какой?

Dmitriy
18.01.2018
15:41:19
Мне нужен 1024-65535

Т.е. от 1 до 512 записей по одному insideIP во всей таблице?
Не по всей таблице). Воемя жизни блока 12 часов

И натиться может в разные адреса

Yaroslav
18.01.2018
15:42:49
Не по всей таблице). Воемя жизни блока 12 часов
А я Вас именно об этом спрашивал. Так сколько там в среднем записей по одному insideip, ориетировочно?

Dmitriy
18.01.2018
15:42:49
Если комп выключился у абона, через 10 минут абон занатится в другой аутсайд

Сложно сказать

Туда еще пишется pat

Там вообше треш

Может быть и 1000 инсайдов в один аутсайд

Yaroslav
18.01.2018
15:44:03
Сложно сказать
А у Вас доступ-то к данным есть? Проверить-то несложно...

Dmitriy
18.01.2018
15:44:26
А у Вас доступ-то к данным есть? Проверить-то несложно...
Нельзя после 17 00 четверга ничего трогатт

Andrey
18.01.2018
15:44:31
Мне нужен 1024-65535
Ой, там не хватит если со знаковым битом не заморачиваться.

Простите.

Yaroslav
18.01.2018
15:44:57
Нельзя после 17 00 четверга ничего трогатт
Даже запросов делать, в смысле? Жаль... и копии нет?

Dmitriy
18.01.2018
15:45:01
Даже запросов делать, в смысле? Жаль... и копии нет?
Запросы через рабочий интерейс без проблем

Т.е. форму заполнить

Я выборку могу сделать

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