
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... и вообще никогда. ;)

tatarin
18.01.2018
13:47:08

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

kino
18.01.2018
13:53:41

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

kino
18.01.2018
13:56:50

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

Google

kino
18.01.2018
13:59:17

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)).

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

Yaroslav
18.01.2018
14:06:50

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

Yaroslav
18.01.2018
14:09:43

kino
18.01.2018
14:10:08
да
тоесть значения предопределены

Yaroslav
18.01.2018
14:13:18
тоесть значения предопределены
Нет, я имею в виду, это же не просто таблица с множествами, например, цветов "просто так", а они к чему-то привязаны, например, это возможные цвета товаров, так?
Нет, я имею в виду, это же не просто таблица с множествами, например, цветов "просто так", а они к чему-то привязаны, например, это возможные цвета товаров, так?
Т.е. если в MySQL у вас есть:
item(item_id, ..., colors_set)
То в PostgreSQL это будет:
item(item_id, ...) + item_colors(item_id, color)

kino
18.01.2018
14:20:35

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

Yaroslav
18.01.2018
14:39:41

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

Google

Dmitriy
18.01.2018
14:55:04

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

Yaroslav
18.01.2018
14:57:58

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

Yaroslav
18.01.2018
14:58:30

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

Yaroslav
18.01.2018
15:06:39

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

Yaroslav
18.01.2018
15:10:48

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;


Andrey
18.01.2018
15:18:55
А Вы его запрос пробовали? Вот такой, например:
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

Dmitriy
18.01.2018
15:31:21
Там по разному бывает
Бывает много инсайдов в один оутсайд
Минимум 0

Andrey
18.01.2018
15:32:23

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

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

Andrey
18.01.2018
15:33:31

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

Yaroslav
18.01.2018
15:34:22

Dmitriy
18.01.2018
15:34:44
Это из сетей

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
Там диапазон какой?

Yaroslav
18.01.2018
15:41:14

Dmitriy
18.01.2018
15:41:19
Мне нужен 1024-65535
И натиться может в разные адреса

Yaroslav
18.01.2018
15:42:49

Dmitriy
18.01.2018
15:42:49
Если комп выключился у абона, через 10 минут абон занатится в другой аутсайд
Сложно сказать
Туда еще пишется pat
Там вообше треш
Может быть и 1000 инсайдов в один аутсайд

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

Dmitriy
18.01.2018
15:44:26

Andrey
18.01.2018
15:44:31
Простите.

Yaroslav
18.01.2018
15:44:57

Dmitriy
18.01.2018
15:45:01
Т.е. форму заполнить
Я выборку могу сделать