Что такое материализованное представление?

материализованное представление Программирование и разработка

материализованное представление

В мире вычислений база данных — это организованный набор данных, которые обычно хранятся и доступны в электронном виде из компьютерной системы.

Система управления базой данных, также известная как СУБД, представляет собой часть программного обеспечения, которое позволяет конечным пользователям (наряду с различными приложениями) взаимодействовать с самой базой данных для сбора и анализа содержащейся внутри информации.

Всё это важно понимать в контексте материализованных представлений, которые играют важную роль в том, как пользователи взаимодействуют с базами данных и извлекают из них ценность в различных ситуациях. Сегодня мы подробно обсудим материализованные представления с примерами.

Что такое материализованное представление?

Материализованное представление — это особый тип объекта базы данных, который содержит любые результаты, полученные в результате запроса. Думайте об этом как о реплике целевого мастера из определённого момента времени. Материализованные представления предварительно вычисляются. Они будут периодически кэшировать результаты запросов для повышения производительности базы данных.

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

Материализованные представления были впервые реализованы в Oracle Database и были доступны во всех версиях, начиная с 8i. Дополнительные среды, поддерживающие материализованные представления, включают PostgreSQL, SQL Server, Sybase SQL Anywhere, BigQuery и другие.

Примеры материализованных представлений

Например, предположим, что у вас есть база данных с двумя таблицами: одна содержит количество сотрудников в вашем бизнесе, а другая — количество отделов в вашем бизнесе.

Используя материализованное представление, вы можете запросить базу данных, чтобы получить всех сотрудников, связанных с определённым отделом.

Или, скажем, у вас есть база данных с двумя таблицами: одна для общего количества произведённых вами продаж, а другая для общей суммы дохода, который вы генерируете. Вы можете использовать материализованное представление, чтобы в режиме реального времени видеть, какой доход приносит каждая продажа.

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

Каждый раз, когда вы запрашиваете базу данных, вы всегда накапливаете какие-то затраты. Даже такая, казалось бы, простая задача, как запрос, по-прежнему означает, что вы анализируете, проверяете, планируете, оптимизируете и выполняете этот запрос, что соответствует времени ЦП, использованию памяти, альтернативным издержкам и многому другому.

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

Здесь в игру вступают материализованные представления.

Поскольку результаты материализованного представления хранятся в памяти, они обновляются только тогда, когда это явно необходимо. Благодаря этому они могут значительно снизить ваши общие затраты по сравнению с запросами к таблицам или использованием логических представлений.

Плюсы материализованных представлений

  • Повышение производительности за счёт предварительных вычислений дорогостоящих операций.
  • Увеличьте скорость запросов в очень больших базах данных.
  • Эффективно выполняйте дорогостоящие запросы или дорогостоящие части ваших запросов.

Минусы материализованных представлений

  • Не каждый тип базы данных поддерживает материализованные представления.
  • Материализованные представления доступны только для чтения.
  • Вы не можете создавать ключи, ограничения, триггеры или статьи.

Как создать материализованное представление

Чтобы создать материализованное представление в инструменте, с которым вы работаете, вы можете использовать оператор DML, чтобы создать базовую таблицу, загрузить в неё данные и в результате создать материализованное представление.

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

CREATE [ OR REPLACE ] [ SECURE ] MATERIALIZED VIEW [ IF NOT EXISTS ] <name>
  [ COPY GRANTS ]
  ( <column_list> )
  [ COMMENT = '<string_literal>' ]
  [ CLUSTER BY ( <expr1> [, <expr2> ... ] ) ]
  AS <select_statement>

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

 CREATE MATERIALIZED VIEW MV_MY_VIEW
REFRESH FAST START WITH SYSDATE
   NEXT SYSDATE + 1
     AS SELECT * FROM <table_name>;

А также пример команды для PostgreSQL, которую можно использовать для создания материализованного представления, выглядит следующим образом:

 CREATE MATERIALIZED VIEW MV_MY_VIEW
 [ WITH (storage_parameter [= value] [, ... ]) ]
    [ TABLESPACE tablespace_name ]
     AS SELECT * FROM <table_name>;

Версия 9.3 и новее изначально поддерживают материализованные представления.

Материализованное представление против представления

Итак, каковы основные различия между представлением и материализованным представлением, и почему вы должны использовать одно вместо другого?

Представление — это особый тип виртуальной таблицы, которая создаётся с помощью команды «Создать представление». Он содержит все данные, полученные из соответствующего выражения запроса.

Если вы работаете с одной или даже несколькими базовыми таблицами или представлениями, вы можете использовать это для создания представления. Вы также можете запросить своё представление таким же образом, как вы использовали бы одну из этих базовых таблиц.

Ключевой момент, который нужно понять, — это то, что View всегда вычисляется каждый раз, когда к нему обращаются каким-либо образом. Из-за этого вы всегда получаете самые свежие данные в любом представлении, которое вы запрашиваете.

Если вы сделаете какое-либо обновление содержимого в представлении, оно всегда будет «отодвинуто назад» и обновлено в исходной таблице. Точно так же верно и обратное: любые изменения, внесённые в исходную базовую таблицу, мгновенно отражаются в представлении.

Однако это означает, что производительность представления всегда будет ниже, чем у материализованного представления. Основным преимуществом является то, что View на самом деле не требует места для хранения. Вы также можете полностью контролировать, какие пользователи могут или не могут просматривать конфиденциальную информацию в самой базе данных.

С другой стороны, материализованное представление — это физическая копия исходных базовых таблиц. Думайте об этом больше как о фотографии оригинального базового стола. Ключевое отличие состоит в том, что материализованное представление не будет обновляться каждый раз при взаимодействии с ним.

Если у вас нет проблем с обновлением его вручную, вы можете сделать это с помощью определённых предопределённых триггеров.

В результате материализованное представление всегда будет отвечать на запрос быстрее, чем традиционное представление, но вы также можете получать устаревшие данные, если не будете осторожны.

Материализованное представление против таблицы

Ответ на этот вопрос в контексте таких сред, как Oracle или MySQL, в конце концов сводится к концепции, называемой «динамическое переписывание запросов». Ключ к пониманию того, что материализованное представление не может правильно определять отношения между данными и исходной базовой таблицей. Это также позволит пользователям предварительно вычислять дорогостоящие объединения и агрегации.

Точно так же материализованное представление также будет иметь определённые параметры, которые можно использовать для автоматического обновления запрашиваемых данных. Это не только в итоге упростит обслуживание, но и значительно повысит эффективность, поскольку эти изменения можно отслеживать по строкам.

Другими словами, материализованное представление всегда будет синхронизировано с «реальными данными» в таблице. На самом деле вам не нужно изо всех сил делать что-либо, потому что в этот момент база данных сделает это за вас.

Заключение

Материализованные представления — отличный способ снизить затраты во время разработки вашего приложения, особенно когда оно продолжает расти. Вы не только сэкономите время настенных часов, но и повысите эффективность, а также сэкономите такие вещи, как время процессора и использование памяти, что приведёт к реальной экономии денежных средств, прежде чем вы об этом узнаете.

Но есть ещё чему поучиться. Чтобы продолжить обучение, вам следует изучить следующие концепции:

  • Создание материализованных представлений с помощью Big Query.
    Присоединение к материализованному представлению.
    Приостановка обновлений.
    Использование общих данных с материализованными представлениями.

 

Читайте также:  Что такое классы контейнеров C++?
Оцените статью
bestprogrammer.ru
Добавить комментарий