Модели данных
Проектирование и разработка распределенных программных систем, лекция 3
Модель данных
Модели на разных слоях
SQL и NoSQL
Реляционная модель
Реляционная модель
Реляционная модель
Реляционная модель
Данные делятся на несколько таблиц и хранятся в нормализованном виде.
Реляционная модель
Объектно-реляционное несоответствие
Объектно-реляционное несоответствие
Модели объектов в коде приложения не соответствуют моделям в таблицах базы данных.
ORM упрощают преобразование моделей, но не могут полностью скрыть различия.
Проблемы
{
"user_id": 251,
"first_name": "Bill",
"last_name": "Gates",
"summary": "Co-chair of the Bill & Melinda Gates... Active blogger.",
"region_id": "us:91",
"industry_id": 131,
"photo_url": "/p/7/000/253/05b/308dd6e.jpg",
"positions": [
{"job_title": "Co-chair", "organization": "Bill & Melinda Gates Foundation"},
{"job_title": "Co-founder, Chairman", "organization": "Microsoft"}
],
"education": [
{"school_name": "Harvard University", "start": 1973, "end": 1975},
{"school_name": "Lakeside School, Seattle", "start": null, "end": null}
],
"contact_info": {
"blog": "http://thegatesnotes.com",
"twitter": "http://twitter.com/BillGates"
}
}
Документоориентированные БД
Древовидная структура
Гибкий формат (schemaless)
Реляционные БД: schema-on-write (данные валидируются в момент записи)
Документоориентированные БД: schema-on-read (данные интерпретируются в момент чтения)
Гибкий формат (schemaless)
Удобно при миграции схемы БД
{
"user_id": 251,
"first_name": "Bill",
"last_name": "Gates",
"summary": "Co-chair of the Bill & Melinda Gates... Active blogger.",
"region_id": "us:91",
"industry_id": 131,
"photo_url": "/p/7/000/253/05b/308dd6e.jpg",
"positions": [
{"job_title": "Co-chair", "organization": "Bill & Melinda Gates Foundation"},
{"job_title": "Co-founder, Chairman", "organization": "Microsoft"}
],
"education": [
{"school_name": "Harvard University", "start": 1973, "end": 1975},
{"school_name": "Lakeside School, Seattle", "start": null, "end": null}
],
"contact_info": {
"blog": "http://thegatesnotes.com",
"twitter": "http://twitter.com/BillGates"
}
}
Почему ID, а не названия?
Связи «многие-к-одному»
Связи «многие-к-одному» плохо вписываются в документоориентированную модель.
В некоторых БД есть джойны, но в реляционных БД они всё равно работают лучше.
Какая модель удобнее?
Зависит от приложения
Можно использовать обе
Сближение моделей
PostgreSQL и MySQL поддерживают колонки в JSON.
Документоориентированные БД внедряют поддержку джойнов.
Глубокие связи «многие-ко-многим»
Графы
Графовая модель данных
Графовые БД
Обход графа на SQL
WITH RECURSIVE [cte_name] (column, ...) AS (
[non-recursive_term]
UNION ALL
[recursive_term])
SELECT ... FROM [cte_name];
БД «ключ-значение»
Dictionary как отдельный сервис.
Кеширование, хранение значений для быстрого извлечения.
БД «ключ-значение»
Колоночные БД
Та же модель данных, что и у реляционных БД.
Данные при хранении сгруппированы не по строкам, а по столбцам.
Колоночные БД
Объектные хранилища
Ссылки
NoSQL – коротко о главном: https://habr.com/ru/company/oleg-bunin/blog/319052/
Мартин Клеппман. Высоконагруженные приложения. Программирование, масштабирование, поддержка. Глава 2
CQRS documents: https://cqrs.files.wordpress.com/2010/11/cqrs_documents.pdf