Типи баз даних
Коли ми починаємо створювати новий продукт або додаток, вибір бази даних стає однією з найскладніших тем для обговорення. Раніше це було досить просто — RDBMS. Однак сьогодні вибір правильної бази даних став більш складним і критичним кроком, оскільки після того, як реальні дані потрапляють у базу, перенести їх з однієї бази в іншу стає дуже важко.
У цьому пості ми не будемо обговорювати конкретні бази даних, такі як MySQL або MongoDB, а розглянемо типи баз даних, такі як RDBMS, графові бази даних або документоорієнтовані бази даних. Ми пройдемо через найбільш популярні типи баз даних і спробуємо зрозуміти, який тип бази даних використовувати в конкретній ситуації. Будь-яка система, що має велику масштабованість і багато складових, використовує більше ніж один тип бази даних.
Порада для співбесіди: Якщо ви не впевнені, яка база даних підходить для конкретного рішення, не варто згадувати конкретні бази даних, такі як Postgresql чи MongoDB, поки ви не зрозумієте всі нюанси. Замість цього використовуйте терміни, як-от RDBMS або DocumentDB чи GraphDB, що відносяться до типів баз даних.
Три фактори, які допомагають вибрати правильну базу даних
- Структура даних: Як будуть організовані дані? Це фіксована схема чи гнучка схема тощо.
- Шаблон запитів: Як будуть отримуватись дані, які операції потрібно виконати і як часто ці операції будуть відбуватись?
- Масштаб: Який обсяг даних і очікуваний ріст? Це впливає на продуктивність і вимоги до зберігання.
Типи баз даних та їх використання
Плоскі файли бази даних Це найстаріша і найпростіша форма зберігання даних, де інформація зберігається в простих текстових файлах.
- Шаблон використання: Це корисно для невеликих додатків, де файл може містити прості та нереляційні дані.
- Випадок використання: Уявіть простий додаток, що хоче зберігати кілька налаштувань або просту таблицю.
- Приклад: Дані, збережені в текстових файлах .txt або файлах .csv з комами.
Реляційні бази даних (RDBMS) Це найбільш поширені бази даних. Вони зберігають дані в таблицях, що складаються з рядків і стовпців, де відносини між таблицями встановлюються за допомогою зовнішніх ключів. Дані можуть бути запитувані за допомогою SQL (Structured Query Language). Єдине, де ці бази даних мають труднощі — це ефективне оброблення великих обсягів та неструктурованих даних.
- Шаблон використання: Додатки, які потребують фіксованої схеми, високої узгодженості та дотримання властивостей ACID. Вони оптимізовані для зберігання даних і здатні обробляти складні запити.
- Випадок використання: Широко використовуються в більшості випадків, від побудови інтернет-магазинів до банківських систем.
- Приклад: MySQL, MS SQL Server, Oracle, та PostgreSQL.
NoSQL бази даних Ці бази даних призначені для обробки неструктурованих або напівструктурованих даних, надаючи більшу гнучкість у тому, як зберігаються дані. Вони часто жертвують строгими вимогами до узгодженості на користь доступності та толерантності до розподілу (див. теорему CAP). Існують різні типи NoSQL баз даних.
- Документоорієнтовані сховища Тут дані зберігаються у вигляді документів. Зазвичай це формат JSON.
- Шаблон використання: Ідеально підходять для додатків, що потребують гнучкої схеми, де документи можуть відрізнятись за структурою, бути напівструктурованими, вкладеними і зазвичай у форматах JSON або XML.
- Випадок використання: Системи керування контентом, додатки для електронної комерції, ведення журналів і аналітики, зберігання даних користувачів.
- Приклад: MongoDB, Apache CouchDB, Couchbase, та Amazon DocumentDB.
- Ключ-значення Тут дані зберігаються у вигляді пар ключ-значення. Ці бази даних оптимізовані для дуже швидкого пошуку. Це найпростіший тип NoSQL бази даних.
- Шаблон використання: Ідеально підходять для кешування та управління сесіями.
Ці бази даних оптимізовані для швидкого отримання даних за конкретним ключем. - Використання: управління веб-сесіями, зберігання профілів користувачів, лідерборди в іграх та реальні системи рекомендацій.
- Приклади: Redis, і Amazon DynamoDB
- Стовпцеві бази даних Тут дані зберігаються стовпцями замість рядків. Вони оптимізовані для великомасштабної аналітики.
- Патерн використання: Ідеальні для аналітики та великих даних, де часто виконується агрегація даних за стовпцями. Тут дані можна запитувати за сімействами стовпців.
- Використання: корисні в сховищах даних, OLAP (Online Analytical Processing), та для реальної аналітики. Застосунки, які потребують роботи з широкими таблицями з великою кількістю атрибутів, такими як телеметрія або логи.
- Приклади: Apache Cassandra, що використовується для великих розподілених систем, та Apache HBase, побудована на основі Hadoop.
- Графові бази даних Тут дані зберігаються як вузли (сутності) та зв’язки (рEdges). Вони оптимізовані для аналізу мереж зв’язків. Вони чудово підходять для управління сильно пов’язаними даними, такими як соціальні мережі.
- Патерн використання: корисні для ситуацій, де зв'язки між даними важливі так само, як і самі дані, а запити часто залучають дослідження зв'язків.
- Використання: Ідеальні для соціальних мереж, систем рекомендацій, виявлення шахрайства, графів знань та будь-якого сценарію, де важливо досліджувати взаємозв’язки між сутностями даних.
- Приклади: Neo4j, Amazon Neptune, Apache TinkerPop (з різними реалізаціями, такими як Gremlin, Datastax Stargate)
Спеціалізовані бази даних
Це бази даних та сховища даних, які розроблені для специфічних випадків використання. Вони допомагають вирішити різноманітні сучасні потреби зберігання даних.
- Бази даних в пам'яті Ці бази зберігають дані безпосередньо в основній пам’яті (RAM), а не на дисках. Це робить отримання даних надзвичайно швидким.
- Патерн використання: застосовуються в програмах, які потребують низької затримки при доступі до даних, таких як кешування, реальна аналітика, лідерборди, або висока швидкість обробки транзакцій.
- Використання: Ідеальні для лідербордів в іграх, торгових платформ, кешування для зменшення навантаження на постійні бази даних, або для будь-якої програми, яка потребує високої пропускної здатності та низької затримки.
- Приклади: Redis, Memcached, etcd тощо.
- Бази даних для часових рядів Ці бази даних призначені для зберігання, керування та запитів даних з часовими мітками. Вони структуровані для обробки точок даних, індексованих за часом, підтримують тільки дописування та великі послідовні зчитування.
- Патерн використання: використовуються в програмах, які відслідковують дані, пов'язані з часом, такі як дані з датчиків, ціни акцій або логи.
- Використання: моніторинг показників продуктивності, історичні ціни на акції, та дані IoT з датчиків.
- Приклади: InfluxDB, Prometheus, та TimeScaleDB
- Пошукові бази даних Ці бази оптимізовані для операцій з повнотекстовим пошуком, дозволяючи швидко виконувати складні запити по великих наборах даних, особливо нерструктурованих або напівструктурованих даних.
- Патерн використання: корисні для програм, що потребують індексації документів або записів даних для швидкого пошуку, включаючи відповідність ключовим словам, фільтрацію, нечіткий пошук, та рейтинг результатів за релевантністю.
- Використання: Ідеальні для пошуку на вебсайтах, пошукових системах, пошуку товарів на сайтах електронної комерції та пошуку документів в системах керування контентом.
- Приклади: Elasticsearch, Solr
- Об'єктне або Blob (Binary Large Object) сховище Ці сховища використовуються для зберігання нерструктурованих або напівструктурованих даних і є високошвидкісними та пропонують потужне керування метаданими для збережених файлів. Кожен об'єкт містить самі дані, метадані та унікальний ідентифікатор.
- Патерн використання: корисні для програм, що потребують зберігання великих обсягів нерструктурованих або напівструктурованих даних, зазвичай у хмарі.
- Використання: Ідеальні для зберігання файлів, відео, зображень, резервних копій, логів та доступу до цих файлів через REST API.
- Приклади: AWS S3, та Google Cloud Storage
- Блочне сховище Це зберігає дані у вигляді фіксованих блоків та зберігає їх через масив сховища.
Кожному блоку надається унікальна адреса, і програми можуть безпосередньо керувати блоками для більш детального контролю над даними. - Патерн використання: корисні для програм, які потребують високопродуктивного зберігання (висока IOPS та низька затримка) та прямого доступу до сирих даних.
- Використання: високопродуктивні обчислення, зберігання баз даних, та зберігання даних для віртуальних машин в хмарі.
- Приклад: Amazon EBS, Azure Managed disk, SSD або NVMe пристрої, iSCSI та SAN (Storage Area Networks)
- Сховище даних Це спеціалізований тип бази даних, призначений для аналітичної обробки. Вони зберігають великі обсяги історичних даних з різних джерел і оптимізовані для складних запитів, звітності та аналізу, а не для обробки транзакцій. Дані очищуються, перетворюються та зберігаються в сховищі даних.
- Патерн використання: корисні для програм, які потребують агрегації та складання звітів на основі великих обсягів структурованих історичних даних, що надходять з різних систем, таких як ERP (Enterprise Resource Planning), CRM (Customer Relationship Management) та інше бізнес- програмне забезпечення.
- Використання: Бізнес-аналітика (BI), аналітика даних, прогнозування трендів та прийняття рішень на основі агрегацій та зведених даних.
- Приклади: AWS Redshift, Google BigQuery, та Snowflake
- Озера даних Це система зберігання, призначена для зберігання величезних обсягів сирих даних у їх рідному форматі, незалежно від того, чи це структуровані, напівструктуровані чи нерструктуровані дані. Озера даних часто використовуються в середовищах великих даних і можуть обробляти все - від тексту та зображень до даних з датчиків IoT. Тут дані знаходяться в сирому вигляді і не очищуються та не перетворюються.
- Патерн використання: корисні для програм, що працюють з аналізом і запитами сирих даних для проведення складної аналітики або обробки великих даних.
- Використання: зберігання даних для майбутнього аналізу, зберігання даних для запуску робочих процесів машинного навчання та аналітики великих даних.
- Приклади: AWS S3, Azure Data Lake, Google Cloud Storage.
- Бази даних векторів Це системи, призначені для зберігання, індексації та пошуку за високорозмірними векторними представленнями даних. Ці вектори часто походять від моделей машинного навчання, які перетворюють текст, зображення, аудіо чи інші типи даних у числові вектори, що дає змогу здійснювати пошук за подібністю. Вони є необхідними для використання в AI-запитах на основі RAG.
- Патерн використання: корисні для програм, які потребують пошуку за подібністю, коли мета - знайти точки даних (наприклад, документи, зображення), які "близькі" одна до одної в багатовимірному векторному просторі.
- Використання: для семантичних пошуків, систем рекомендацій, запитів на основі RAG в AI.
- Приклади: Pinecone, кероване векторне сховище, Weaviate - відкрите джерело для пошуку векторів, FAISS від Facebook AI Research.
Спадкові бази даних
Це найстаріші типи баз даних. Вони все ще використовуються в деяких спадкових системах. Не слід пропонувати ці типи баз даних на сучасному етапі. Згадуємо їх тут для обізнаності.
- Ієрархічні бази даних Ці бази даних організовують дані в деревоподібну структуру. Кожен елемент даних є вузлом в такій структурі дерева, де батьківський вузол може мати кілька дітей, але кожна дитина має лише одного батька. Ці бази даних є жорсткими і не здатні обробляти складні взаємозв'язки.
- Мережеві бази даних Це вдосконалення ієрархічних баз даних, оскільки вони дозволяли визначати більш складні взаємозв'язки. Тут кожен дочірній вузол також може мати кілька батьківських вузлів.
Як структура даних впливає на вибір бази даних?
Структура даних визначає, як дані організовані, представлені та взаємопов’язані в системі.
Ця структура значно впливає на вибір бази даних, оскільки різні бази даних оптимізовані для різних типів структур даних, форматів зберігання та патернів запитів.
Дані можуть бути:
- Структуровані — запис працівника, довідник ліків, запис на прийом до лікаря тощо
- Напівструктуровані — JSON та XML для каталогів продуктів
- Неструктуровані — зображення, аудіо, відеофайли для медіаплатформ або систем управління документами
- Схожі на графи — соціальні мережі
- Високовимірні вектори — дані, представлені як багатовимірні вектори, такі як вбудовування тексту або зображень
Структура даних впливає на вибір бази даних через вимоги до:
- Гнучкості схеми — RDBMS проти NoSQL
- Патерну запитів — RDBMS проти Graph проти In-Memory
- Розміру даних — RDBMS проти NoSQL баз даних проти Blob Storage
Як патерн запитів впливає на вибір бази даних?
Патерн запитів відноситься до типової структури та типу операцій, які ваша програма виконує на базі даних, таких як отримання, вставка, оновлення або видалення даних. Це найбільш поширені способи взаємодії вашої системи з даними і є ключовим фактором при виборі правильної бази даних.
- Прості пошуки: — Пошук конкретного елемента за унікальним ідентифікатором (наприклад, ID користувача, ID продукту). Сховища ключ-значення, як Redis або DynamoDB, оптимізовані для швидких пошуків за унікальними ключами.
- Запити по діапазону: — Отримання даних, що потрапляють в певний діапазон, наприклад, за датами або числовими значеннями. Бази даних часового ряду (наприклад, InfluxDB) або реляційні бази даних (наприклад, MySQL) добре працюють для запитів по діапазону.
- Реляційні (JOIN) запити: — Об’єднання даних з кількох таблиць або колекцій на основі їхніх взаємозв’язків, наприклад, через зовнішні ключі. Реляційні бази даних (наприклад, PostgreSQL, MySQL) чудово справляються з обробкою JOIN і складними зв'язками між структурованими таблицями даних.
- Повнотекстовий пошук: — Пошук серед великих обсягів текстових даних за певними ключовими словами або фразами. Пошукові бази даних, як Elasticsearch, призначені для повнотекстового пошуку, пропонуючи швидкі та точні результати запитів на основі тексту.
- Запити на подорож графом: — Пошук взаємозв’язків між точками даних, наприклад, між людьми або сутностями. Графові бази даних, як Neo4j, оптимізовані для обходу зв'язків між вузлами та ефективного відповідного запиту про зв'язки.
- Агрегаційні запити: — Підсумовування або агрегація даних (наприклад, підрахунок, середнє значення, сума) по великих наборах даних. Колонкові бази даних (наприклад, Apache Cassandra, HBase) або сховища даних (наприклад, Amazon Redshift, Google BigQuery) побудовані для ефективної обробки агрегацій на великих масштабах.
- Геопросторові запити: — Пошук даних на основі географічних локацій або просторових взаємозв’язків. Геопросторові бази даних або бази даних з геопросторовими розширеннями, як PostgreSQL з PostGIS або MongoDB, найкраще підходять для геопросторових запитів.
- Пошук за подібністю: — Знаходження точок даних, які є схожими на заданий вхід на основі векторів або вбудовувань. Векторні бази даних (наприклад, Pinecone, Weaviate) оптимізовані для пошуку подібності у багатовимірному векторному просторі, часто використовуються в застосунках машинного навчання та AI.
Оригінал опубліковано на https://memorybytes.onrender.com.
Перекладено з: Database types to choose from