Comments 30
Отлично, так и надо писать статьи про обновления — подробно, с примерами, а не просто перечисление новых фич.
+28
Интересно, спасибо.
Материализированное представление — интересная штука, но где их можно применить на практике? Судя по плану запроса и индексам, это просто аналог обычной таблицы, данные в которой приходится так же обновлять. Хотя проще иметь один объект-представление, нежели создавать таблицу + функцию для её обновления.
Материализированное представление — интересная штука, но где их можно применить на практике? Судя по плану запроса и индексам, это просто аналог обычной таблицы, данные в которой приходится так же обновлять. Хотя проще иметь один объект-представление, нежели создавать таблицу + функцию для её обновления.
0
Первое, что пришло в голову в момент прочтения статьи: есть база регионов присутствия провайдера, есть база районов в них, есть населенных пунктов, есть улиц и домов. По house_id формирую строку адреса, но пока приходится хранить в абонентах как строку-адрес, так и house_id для упрощения поиска. Далее, мы пишем улицы без сокращений, но некоторые названия так и хочется сократить, т.к. длина названия стремится к ширише монитора )) (погуглите улицы в Вышнем Волочке). С помощью материализованного представления я смогу собрать различные написания адресов в строки и подкрепить их к house_id. Плюсы очевидны.
Оффтоп: слоны зачетные ))
Оффтоп: слоны зачетные ))
0
Там где используются тяжёлые запросы, а данные меняются сравнительно редко. Как у нас в проекте, например. Нам просто обязательно приходится эмулировать материализованные представления, пока нельзя будет перейти на 9.3, где это делается так просто и лаконично.
0
> Материализированное представление — интересная штука, но где их можно применить на практике?
Например, в таблицах, собирающих статистику. Если статистика нетривиальная (или собирать ее надо на большом объеме данных), то обычное представление будет выдавать результат за совершенно неудовлетворительное время.
Например, в таблицах, собирающих статистику. Если статистика нетривиальная (или собирать ее надо на большом объеме данных), то обычное представление будет выдавать результат за совершенно неудовлетворительное время.
0
Во, есть такое.
Обычно делается сводная таблица, которая заполняется длительное время, и это никак нельзя сделать по клиентскому запросу (время ожидания составляет десятки минут), формируем её обычно в конце отчётного периода, либо, если очень срочно нужно, в любое время по запросу пользователей. А клиент просто берёт из неё готовые данные.
Реализовано с помощью обычной таблицы и функции, её заполняющей.
Обычно делается сводная таблица, которая заполняется длительное время, и это никак нельзя сделать по клиентскому запросу (время ожидания составляет десятки минут), формируем её обычно в конце отчётного периода, либо, если очень срочно нужно, в любое время по запросу пользователей. А клиент просто берёт из неё готовые данные.
Реализовано с помощью обычной таблицы и функции, её заполняющей.
0
В __Оракле__ используем хранимые представления с обновлением как по ON UPDATE так и по таймеру (раз в час).
В какой то мере заменяет сфинкс для поиска в большом объёме данных по «многоджойнутым» запросам и, по сравнении со сфинкс, решает проблемы доступа к отдельным записям путём дополнительного join на таблицы привилегий, которые у каждого пользователя могут отличаться.
В общем, мощная и удобная штука.
Хорошо, если такое же теперь есть теперь в PostgreSQL.
В какой то мере заменяет сфинкс для поиска в большом объёме данных по «многоджойнутым» запросам и, по сравнении со сфинкс, решает проблемы доступа к отдельным записям путём дополнительного join на таблицы привилегий, которые у каждого пользователя могут отличаться.
В общем, мощная и удобная штука.
Хорошо, если такое же теперь есть теперь в PostgreSQL.
0
Великолепная статья. Спасибо. А почему триггер на обновление представления из примера выполняется «for each row»? Разве недостаточно будет выполнить обновление для операции в целом?
+3
Да уж, после прочтения таких новостей крайне грустно возвращаться к MySQL.
Oracle совершенно не шевелится с добавлением чего-то действительно полезного.
Oracle совершенно не шевелится с добавлением чего-то действительно полезного.
+1
Ну всё, ребята, сейчас будут PHP гуру насиловать JSONом postgres.
Как по мне, это они перестарались. Может мне может кто-нибудь объяснить, зачем в базе данных этот тип?
Как по мне, это они перестарались. Может мне может кто-нибудь объяснить, зачем в базе данных этот тип?
-1
А почему бы и нет. У многих NoSQL баз данных отпал такой аргумент «schema-less» против PostgreSQL :)
+1
Я могу. Мне его сильно не хватало. Ибо обычного hstore маловато будет.
Есть такая штука как OpenStreetMap. Точнее его база. У узлов описывающие географические объекты есть таги. К примеру маяки.
Нужно описать их тип, световые сектора их цвета, частоту мерцания. А у моста или порта этоти таги совсем другие.
Т.е. конкретно выделить схему атрибутов различных типов объектов нельзя. Точнее можно и нужно но спроецировать ее на базу очень гемморойно.
Сейчас атрибуты можно хранить в плоском виде т.к hstore не может в качестве значения использовать другой hstore. в результате чего ключи выглядят так seamark:light:1:color=>red. Что не очень удобно и для индексации и для разбора. JSON тут более естественен.
Есть такая штука как OpenStreetMap. Точнее его база. У узлов описывающие географические объекты есть таги. К примеру маяки.
Нужно описать их тип, световые сектора их цвета, частоту мерцания. А у моста или порта этоти таги совсем другие.
Т.е. конкретно выделить схему атрибутов различных типов объектов нельзя. Точнее можно и нужно но спроецировать ее на базу очень гемморойно.
Сейчас атрибуты можно хранить в плоском виде т.к hstore не может в качестве значения использовать другой hstore. в результате чего ключи выглядят так seamark:light:1:color=>red. Что не очень удобно и для индексации и для разбора. JSON тут более естественен.
+1
Затем чтобы в таблице не держать 100 полей. Например атрибуты пользователя, коих может быть оооочень много.
0
очень интересно, спасибо.
-1
UFO just landed and posted this here
А я хочу пакеты… а их всё нет и нет =(
+1
> Note that materialized views cannot be auto-refreshed; refreshes are not incremental; and the base table cannot be manipulated
21 год назад (1992 г), у Oracle 7 уже был fast refresh (incremental refresh в терминах пострге).
Пруф — docs.oracle.com/cd/A57673_01/DOC/server/doc/SQL73/ch4a.htm#toc100
Постгре, шажочек за шажочком, гонится за ораклом, отставая на десятилетия. Всё-равно молодцы.
21 год назад (1992 г), у Oracle 7 уже был fast refresh (incremental refresh в терминах пострге).
Пруф — docs.oracle.com/cd/A57673_01/DOC/server/doc/SQL73/ch4a.htm#toc100
Постгре, шажочек за шажочком, гонится за ораклом, отставая на десятилетия. Всё-равно молодцы.
+1
В частных случаях incremental refresh несложно сделать руками. По настоящему ракетная наука, это Qwery Rewrite, позволяющий автоматически подставлять Materialized View в SQL-запросы пользователя, переписывая их.
0
Sign up to leave a comment.
PostgreSQL 9.3 Что нового?