Насущные грабли современных SQL СУБД

топ 100 блогов zabivator30.09.2010 Сильные стороны:
* Методология проектирования: ER-модели предоставляют простую форму формального описания сущностей. Правила перехода от ER-моделей к реляционной представлению (DDL-запросам) достаточно формализованы с одной стороны, а с другой являются достаточно гибкими: DBA может легко произвести денормализацию данных
* Развитые языки управления схемой данных (DDL) позволяют моделировать (создавать) большинство сущностей разрабатываемой системы каким угодно образом.
* Язык SQL является простым, высокоуровневым языком для генерации произвольных происходных данных из исходных.
* Наличие VIEW позволяет описывать производные данные "как будто" исходные.

Слабые стороны:
* Вносить изменения в имеющуюся схему базы весьма проблематично. Фактически, версионировать базы (управлять различными версиями одной и той же базы) приходится вручную, нет удобных способов производить автоматическую миграцию данных при изменении схемы. Добавили атрибут? Привет ALTER TABLE. Поменялись (упаси господь) связи? Welcome to hell.
* Слабая интеграция хранимых (генерируемых) данных с приложениями. Добавили новую таблицу в базу? Нужно отображать? Пишем запросы к таблицам, и интеграционный слой для сортировки по колонкам, фильтрации, показа/скрытия столбцов.
* Сложный и неочевидный тюнинг производительности. EXPLAIN, конечно, помогает, но местами настройка базы и переписывание запросов напоминает вуду и шаманство.

Большое количество ORM'ов и популярность NoSQL по большёму счёту спровоцирована ровно одним недостатком: пенальти между хранением данных в базе и их представлением в программе по их визуализации/раздаче.

Какие есть методы решения?
* Генерация схемы базы из модели иной формы. Прощай оптимизация и денормализация базы. Привет куча ad-hoc'ов.
* Генерация модели (классов, функций. структур) из базы. Не работает - данные в базе не содержат информацию про способ их визуализации. Иногда появляется всякие мета-описания, но производительность такого решения ужасающая.
* Переход к двухзвенкам. Требует монотонной ручной работы, развитых хранимых процедур, не имеет проблем первых двух подходов (см. ниже)

Два первых способа имеют более серьёзные проблемы:
* Двухфазный коммит. Данные нужно обновлять как в target language представлении так и базе. Что происходит с транзакциями и целостностью, пояснять, думаю, смысла не имеет.
* Слой кеширования и его инвалидация. Без trird-party кеша СУБД ляжет (если нет поддержки query result cache на уровне базы, естественно), с third-party кешом появляется куча геммороя типа его инвалидациии, особенно для производных данных.

Хрен его знает что с этим всем делать.

Забыл подписаться - искренне Ваш, Капитан Очевидность

Оставить комментарий

Архив записей в блогах:
Как вы уже заметили, я о своих страданиях не распространяюсь и жаловаться не люблю.  Хотя бы потому что тонко-депрессивной натурой, склонной к терзаниям и рыданиям, ни в коем разе не являюсь.  Я женщина простая, как чугунная сковорода, и в ...
Вице-спикер Думы Владислав Даванков: «Пора забрать радугу у меньшинств и вернуть её нашим детям — чтобы в их жизни было больше красок, а не только чёрное и ...
Кажется, кого-то тоже насильственно везут на фотосессию: Слава богу, меня хоть без бантика и мадженты . У нас Рождество сегодня, столько всего надо успеть, но нет - свет идеальный, солнца нет, надо фотографироваться. Зато у этих близняшек праздник уже в разгаре: ...
Вы, наверное, знаете, что в начале весны у всех пользователей стиля Air в ЖЖ появилась новая возможность самовыражения с помощью обновлённой шапки блога . Рады, что вам понравилось это обновление! Мы тоже в восторге! ...
Мамы малышей 3-5 месяцев (когда ребенок уже вовсю интересуется окружающим миром,но ещё НЕ сидит), поделитесь, пожалуйста, чем вы занимаете детей во время бодрствования, при условии, что: а) ребёнок в добром здравии  и хорошем расположении духа, т.е. его не надо ...