Ответ
Все базы данных можно условно разделить на две большие категории: реляционные (SQL) и нереляционные (NoSQL).
1. Реляционные (SQL)
Хранят данные в строго структурированном виде — в таблицах, состоящих из строк и столбцов. Связи между таблицами устанавливаются с помощью ключей. Гарантируют целостность данных через ACID транзакции.
- Ключевые особенности: Строгая схема, надежность, транзакционность.
- Примеры: PostgreSQL, MySQL, Oracle, SQLite, MS SQL.
- Когда использовать: Финансовые системы, e-commerce, системы бронирования — везде, где важна целостность и консистентность данных.
2. Нереляционные (NoSQL)
Предлагают гибкие модели данных и часто оптимизированы для масштабируемости и высокой производительности, иногда в ущерб строгой консистентности (модель BASE).
Основные типы NoSQL баз данных:
Документо-ориентированные
- Описание: Хранят данные в виде JSON-подобных документов. Схема гибкая.
- Примеры: MongoDB, Couchbase.
- Использование: Системы управления контентом, профили пользователей, каталоги товаров.
Ключ-значение (Key-Value)
- Описание: Самая простая модель: данные хранятся как пара ключ-значение.
- Примеры: Redis, Memcached, DynamoDB.
- Использование: Кэширование, хранение сессий, таблицы лидеров в реальном времени.
Колоночные (Column-family)
- Описание: Хранят данные по колонкам, а не по строкам. Оптимизированы для агрегации и аналитических запросов по большим данным.
- Примеры: Cassandra, ScyllaDB, ClickHouse.
- Использование: Аналитика, Big Data, временные ряды (time-series).
Графовые (Graph)
- Описание: Созданы для хранения данных в виде узлов (вершин) и связей (ребер) между ними.
- Примеры: Neo4j, Amazon Neptune.
- Использование: Социальные сети, рекомендательные системы, системы обнаружения мошенничества.
Пример работы с PostgreSQL в Go:
import (
"database/sql"
_ "github.com/lib/pq" // Драйвер для PostgreSQL
)
// ...
db, err := sql.Open("postgres", "user=... password=... dbname=... sslmode=disable")
if err != nil {
log.Fatal(err)
}
// Запрос с параметром для защиты от SQL-инъекций
rows, err := db.Query("SELECT id, name FROM users WHERE age > $1", 18)
// ... дальнейшая обработка результата