Достижение лучшей производительности БД - PullRequest
1 голос
/ 09 июля 2010

У меня есть веб-сайт, поддерживаемый реляционной базой данных, состоящей из обычных таблиц, связанных с электронной торговлей (Order, OrderItem, ShoppingCart, CreditCard, Payment, Customer, Address и т. Д.).

сохраненный процесс. который возвращает историю заказов очень медленно из-за количества данных + многочисленных объединений, которые должны произойти, и в зависимости от параметров поиска иногда истекает (несмотря на имеющееся индексирование).

Схема БД довольно хорошо нормализована, и я верю, что смогу добиться большей производительности, перейдя к чему-то вроде хранилища данных. Проекты DW не тривиальны, и тогда возникает проблема синхронизации данных, поэтому мне было интересно, если кто-нибудь знает о ярлыке. Возможно, готовое решение, которое будет создавать схему DW и поддерживать синхронизацию данных (возможно, с помощью триггеров). Я слышал о Lucene, но, похоже, он больше ориентирован на поиск текста и управление документами. У кого-нибудь есть другие предложения?

Ответы [ 2 ]

1 голос
/ 13 июля 2010

Насколько велика ваша база данных?

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

Я рекомендую вам взглянуть на книги Кимбалла.

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

Таким образом, хотя проекты DW могут быть не тривиальными, методы денормализации очень доступны и применимы без необходимости создания полного не зависящего от времени хранилища данных.

0 голосов
/ 09 июля 2010

Материализованные представления - это то, что вы можете использовать в Oracle.Они предоставляют вам необходимую функцию «синхронизации данных» в сочетании с быстрым доступом к сводным данным.Поскольку вы не упомянули какие-либо особенности (платформы, спецификации сервера, количества строк, количества обращений в секунду и т. Д.) Вашей платформы, я не могу ничего поделать.

Конечно,мы предполагаем, что вы уже проверили, что весь ваш SQL написан правильно и оптимально, что ваша индексация правильная, что вы правильно используете кэширование на всех уровнях вашего приложения, что на вашем сервере БД достаточно ОЗУ, быстрые жесткие диски и т. д..

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

...