Comments 24
UFO just landed and posted this here
Кажется расширения под 9.6 нет, но я не сильно искал
Даже 11-й зарелизился
Ну или если решили, что нужно использовать PipelineDB, а хотите продолжать сидеть на 9.6, то всегда можно поднять ещё один свежий Postgres и там развлекаться
PipelineDB currently supports PostgreSQL versions 10.1, 10.2, 10.3, 10.4, 10.5, and 11.0Как быть — заюзать уже пг 10 )
Даже 11-й зарелизился
Ну или если решили, что нужно использовать PipelineDB, а хотите продолжать сидеть на 9.6, то всегда можно поднять ещё один свежий Postgres и там развлекаться
0
del
0
Интересно: а это расширение может помочь, если данные будут в основном в JSONB поле?
0
Типа того?
Не вижу проблем с таким вариантом, хотя не пробовал
Тут же суть в том, что расширение организует поточную обработку данных
т.е.: приходят данные, возможно накапливаются в каком-то буфере, в фоне выполняется запрос из вьюхи над новыми данными, далее — результат вставляется в результирующую таблицу, либо — дополяет старые данные
И чисто теоретически не сильно важно, какого типа данные гоняются от потока до вьюхи, потому что вы сами же с ними и работаете весьма прозрачным образом
Например если у вас в jsonb хранится массив объектов и хотите именно его обрабатывать «в потоке», то можно сделать трансформацию разложив массив на строки и… работать как с обычной таблицей
select minute(eventtime) as time,
sum((data->>'value')::integer) as sum
from table1
Не вижу проблем с таким вариантом, хотя не пробовал
Тут же суть в том, что расширение организует поточную обработку данных
т.е.: приходят данные, возможно накапливаются в каком-то буфере, в фоне выполняется запрос из вьюхи над новыми данными, далее — результат вставляется в результирующую таблицу, либо — дополяет старые данные
И чисто теоретически не сильно важно, какого типа данные гоняются от потока до вьюхи, потому что вы сами же с ними и работаете весьма прозрачным образом
Например если у вас в jsonb хранится массив объектов и хотите именно его обрабатывать «в потоке», то можно сделать трансформацию разложив массив на строки и… работать как с обычной таблицей
0
А можно JSONB разложить в представление (view)?
0
Определённо да, вечером скину пример
0
Один JSON-объект можно разложить в запись с помощью jsonb_to_record
, а массив — с помощью jsonb_to_recordset
. См. официальную документацию и мой пример.
0
Как подсказали выше, вот так
select *
from jsonb_to_recordset(
'[{"a":1,"b":"foo"},{"a":"2","c":"bar", "v":"2018-04-01"}]'::jsonb
) as x(a int, b text, v date, not_exists time);
0
Это простенький JSON, а если сложный иерархический, но структура более менее постоянна.
0
Можно вытаскивать нужный кусок JSONB и скармливать его это же функции, на ходу подправляя, если требуется.
Вот, например, если у нас есть таблица listings
, у которой есть jsonb-поле raw
, где-то в недрах которого лежит нужный нам массив (а иногда не массив):
SELECT id, v."SKU"
FROM
listings,
jsonb_to_recordset(
CASE jsonb_typeof(raw->'Variations'->'Variation')
WHEN 'array' THEN raw->'Variations'->'Variation'
ELSE jsonb_build_array(raw->'Variations'->'Variation')
END
) AS v("SKU" varchar)
WHERE raw IS NOT NULL
AND raw->'Variations'->'Variation' IS NOT NULL
+1
Т.е. эта система потокобезопасная и лишена дедлоков при наличии вставок через несколько подключений к БД?
0
Не знаю
Уверен, что при простом использовании стримов и вьюх — всё будет ок
Но если использовать вызовы различных кастомных методов, то внутри можно написать любуую логику и да — монжо словить классический дедлок, всё как всегда
У них в репе issues имеют метку deadlock, но они скорее не к экстеншену для postgres
Уверен, что при простом использовании стримов и вьюх — всё будет ок
Но если использовать вызовы различных кастомных методов, то внутри можно написать любуую логику и да — монжо словить классический дедлок, всё как всегда
У них в репе issues имеют метку deadlock, но они скорее не к экстеншену для postgres
0
А где в статье связь между запросом
и стримом
Я так понимаю, в «table» нужно триггер или правило добавлять, чтобы заливать данные в «flow_stream»?
SELECT hour(datetime), somename, count(*), sum(somemetric)
from table
where datetime > :monthAgo
group by 1, 2
order by 1 desc, 2
и стримом
CREATE FOREIGN TABLE flow_stream (
dtmsk timestamp without time zone,
action text,
duration smallint
) SERVER pipelinedb;
Я так понимаю, в «table» нужно триггер или правило добавлять, чтобы заливать данные в «flow_stream»?
0
PipelineDB можно рассматривать как таблицы с интегрированными триггерами.
0
Мне очень понравился первый абзац:
Что если у меня уже есть Postgres DB со своими таблицами, к которым требуется писать множество агрегатных запросов. Я так понимаю, чтобы использовать PipelineDB, я должен переместить таблицы в PipelineDB или написать некие правила для отправки данных из своих таблиц в PipelineDB? — этих правил в статье я не увидел.
Вас когда-либо просили посчитать количество чего-то на основании данных в бд за последний месяц, сгруппировав результат по каким-то...
Что если у меня уже есть Postgres DB со своими таблицами, к которым требуется писать множество агрегатных запросов. Я так понимаю, чтобы использовать PipelineDB, я должен переместить таблицы в PipelineDB или написать некие правила для отправки данных из своих таблиц в PipelineDB? — этих правил в статье я не увидел.
0
Достаточно детальный пример с примечаниями: Streaming Databases & PipelineDB: Likes Use Case
В статье много чего не описано по сравнению с официальной документацией, в том числе и про докер, т.к. готовый образ уже собран.
В статье много чего не описано по сравнению с официальной документацией, в том числе и про докер, т.к. готовый образ уже собран.
+1
Почитал документацию, для себя определил PipelineDB, как механизм агрегирующих счетчиков в режиме реального времени. Счетчик от потока отключил, агрегированные данные потерял.
Идея интересная, но не для случая уже хранимых данных. Удобно для данных, которые только планируется сохранять, с учетом, что счетчики должны быть включены заранее.
Идея интересная, но не для случая уже хранимых данных. Удобно для данных, которые только планируется сохранять, с учетом, что счетчики должны быть включены заранее.
0
UFO just landed and posted this here
curl -s http://download.pipelinedb.com/apt.sh | bash
Очень сильно удивился увидев такую конструкцию. Открыл документацию pipelinedb и увидел там ровно такую же строчку. Выглядит очень грустно.
0
Угу. В нем безапеляционно мелькают строки «apt-get install -y ...» без всяких вопросов. За такое обычно по рукам бьют.
0
Это проблемы разного уровня, если я ничего не путаю.
apt-get install -y в худшем случае сломает вам систему, если у вас нет косячных репозиториев.
curl -s http | bash — в худшем случае установит вирус, который спросит права на рута и вы ему их сами предоставите
apt-get install -y в худшем случае сломает вам систему, если у вас нет косячных репозиториев.
curl -s http | bash — в худшем случае установит вирус, который спросит права на рута и вы ему их сами предоставите
0
Поздно postgresql, поздно. OLAP+SQL=ClickHouse.
У нас у самих до сир пор осталось пяток самописных агрегаций в постгресе. Характеристика одним словом — неудобно.
У нас у самих до сир пор осталось пяток самописных агрегаций в постгресе. Характеристика одним словом — неудобно.
+1
Sign up to leave a comment.
PostgreSQL: PipelineDB — агрегирующие запросы в режиме реального времени