Denormalizing your data in MySQL - the right way

19
Veselin Georgiev, PhD @petrovkata

Transcript of Denormalizing your data in MySQL - the right way

Veselin Georgiev, PhD

@petrovkata

Защо MySQL?

Денормализирането по същество

Нужда от денормализация

Проблеми на денормализацията

Подходи при денормализиране

Materialized views

Добри и лоши практики

Вече не е Community driven

Не е точно Open Source

Принципите са приложими не само за MySQL

Други СУБД имат по добри резултати при релационния модел

Точно заради проблема с натоварването трябва да оптимизираме

Forks, 99% съвместими с MySQL

Огромна популярност

Множество инструменти

Широко разпространение

№ 1 в уеб и № 2 въобще

Изчислени стойности

Невъзпроизводими изчисления

Join Jungles

Натоварване / Скалиране

Оптимизира операциите за четене

Увеличава операциите за писане

Не решава проблема с тежки или сложни заявки

Не решава проблема с множество операции по писане

Разлика между OLTP / OLAP

Обема на данните се увеличава

Сложни и скъпи процеси по обновяване да данните

Повишаване на сложността на схемата на базата

Сложни процеси по разработка и поддържане чист модела на базата

Смесване на Нормализирани и денормализирани данни в една таблица

Дублирани или кеш таблици директно в MySQL◦ Използване на Trigger-и за опресняване на данните◦ Периодично опресняване◦ Инвалидиране на кеш при събитие◦ Използване на Shadow таблица при опресняване

Atomic rename (RENAME TABLE foo TO foo_old, foo_new To foo;)

Summary таблици◦ Агрегирани и групирани данни◦ Толеранс към актуалност на данните

Counter tables◦ Съдържат сумарни данни◦ Проблем с конкуренция/глобален mutex

UPDATE hit_counter SET cnt = cnt + 1

UPDATE hit_counter SET cnt = cnt + 1 WHERE slot = RAND() * 100;

Периодично увеличаване

Кеш/дублиране на данни извън MySQL◦ Memcached◦ NoSQL◦ BIS◦ Data warehouses◦ Аналитични инструменти

Materialized views◦ MySQL не ги подържа

◦ Физически съществуващи данни, не виртуални

◦ Данни акумулирани от различни източници, за конкретна цел

◦ Въпросът с актуалността в MySQL е въпрос на разработчика

Flexviews - Materialized views и MySQL

Автоматизирано опресняване на данните Complete

Incremental – (не поддържа всички Select клаузи, union, distinct avg, distinct sum …)

Flex Change Data Capture (FlexCDC) Използва Binary логове, а не таблиците в базата

SQL API Можем да създаваме в runtime view-та

Naming conventions

Запазване на връзки (foreign keys)

Мета данни

Документиране

Въпроси?