Драйвер ClickHouse и другие БД из .NET (Firebird, MS SQL)
↑ 4.1 ADO.NET, Npgsql и Dapper · ← Предыдущая
Зачем это на собесе
Показывает широту: в реальных проектах часто несколько СУБД. Ждут понимания, чем аналитические БД отличаются от OLTP.
Объяснение
| СУБД | Пакет | Замечание |
|---|---|---|
| PostgreSQL | Npgsql (+ Npgsql.EntityFrameworkCore.PostgreSQL) | основной выбор |
| MS SQL Server | Microsoft.Data.SqlClient | MARS, TransactionScope |
| ClickHouse | ClickHouse.Client | колоночная аналитическая БД, HTTP-интерфейс |
| Firebird | FirebirdSql.Data.FirebirdClient | встречается в legacy |
| MongoDB | MongoDB.Driver | документная |
| Redis | StackExchange.Redis | кэш, очереди |
ClickHouse
Предназначен для аналитики (OLAP): огромные объёмы, агрегаты, вставка батчами, а не построчно; нет полноценных транзакций и эффективных UPDATE.
using var conn = new ClickHouseConnection("Host=ch;Database=analytics");
await conn.OpenAsync(ct);
using var bulk = new ClickHouseBulkCopy(conn) { DestinationTableName = "events", BatchSize = 100_000 };
await bulk.InitAsync();
await bulk.WriteToServerAsync(rows, ct);
var cmd = conn.CreateCommand();
cmd.CommandText = "select toStartOfHour(ts) h, count() from events where ts > {since:DateTime} group by h";Абстракция
Общий интерфейс IDbConnection позволяет писать Dapper-запросы к разным БД, но диалекты SQL различаются: изолируйте доступ за репозиториями/read-моделями.
Нюансы и подводные камни
- ClickHouse: не вставляйте по одной строке; используйте батчи или буферные таблицы/Kafka engine.
- Разные типы времени и часовые пояса между СУБД.
- Firebird: длина идентификаторов и диалект SQL; тестируйте на реальном экземпляре.
- Не тащите OLTP-паттерны (обновления по одной записи) в OLAP-хранилище.
Практика
- Запишите 1 млн событий в ClickHouse через
BulkCopyи постройте агрегат по часам. - Подключите вторую БД и изолируйте её за интерфейсом.
- Сравните скорость агрегата в PostgreSQL и ClickHouse на тех же данных.
Вопросы с ответами
Чем ClickHouse отличается от PostgreSQL?
Колоночное хранение для аналитики: быстрые агрегаты по большим таблицам, но слабые точечные обновления и транзакции.
Почему в ClickHouse вставляют батчами?
Каждая вставка создаёт «part»; частые мелкие вставки нагружают слияния.