Ваш PostgreSQL-кластер упирається в ліміти запису, а ручне шардування потребує постійних доопрацювань. Наприклад, SaaS-платформа з 50 тис. користувачів з різних регіонів: дані в одному дата-центрі, затримки для віддалених клієнтів. CockroachDB — розподілена SQL-база, що вирішує ці проблеми без єдиної точки відмови. Як зазначається в офіційній документації, UUID первинні ключі запобігають гарячим точкам і підвищують продуктивність до 95%. Ми впровадили CockroachDB на 30+ проектах, від SaaS до глобальних платформ. Один клієнт — SaaS з 50k користувачів — витрачав значні кошти на PostgreSQL-кластер. Після міграції на CockroachDB витрати знизилися приблизно на 40%, а відмовостійкість досягла 99.99%. Зв'яжіться з нами для безкоштовної консультації — оцінимо ваш проект.
CockroachDB vs PostgreSQL: ключові відмінності
CockroachDB — розподілена SQL-база, сумісна з PostgreSQL-протоколом. На відміну від PostgreSQL, вона забезпечує горизонтальне масштабування — додавання нод збільшує пропускну здатність запису. Автоматична реплікація копіює дані на кілька нод, вихід однієї не впливає на роботу. Multi-region deployment дозволяє зберігати дані в різних регіонах з урахуванням local data compliance. При навантаженні понад 10k запитів на секунду CockroachDB обробляє транзакції в 2–3 рази швидше порівняно з PostgreSQL з ручним шардуванням. Ви продовжуєте використовувати pg-драйвери та знайомий SQL.
Чому CockroachDB краще підходить для глобальних веб-застосунків?
Глобальні застосунки вимагають низької затримки в усіх регіонах. CockroachDB підтримує geo-партиціонування: дані автоматично розміщуються ближче до користувача. Це знижує час відгуку та підвищує чуйність інтерфейсу. Крім того, вбудована реплікація забезпечує узгодженість даних при збоях — немає єдиної точки відмови. Для SaaS-платформ це означає стабільну роботу навіть при пікових навантаженнях.
Як швидко запустити dev-кластер?
Для розробки достатньо однієї ноди без SSL. Встановлення займає 10 хвилин. Виконайте кроки:
-
Завантажте та розпакуйте бінарник:
wget -qO - https://binaries.cockroachdb.com/cockroach-latest.linux-amd64.tgz | tar xz mv cockroach-*/cockroach /usr/local/bin/ -
Запустіть одно вузловий кластер у фоні:
cockroach start-single-node --insecure --background --store=/var/lib/cockroachdb --listen-addr=localhost:26257 --http-addr=localhost:8080 --log-dir=/var/log/cockroachdb -
Створіть базу та користувача:
cockroach sql --insecure -e "CREATE DATABASE myapp; CREATE USER myapp WITH PASSWORD 'strong_password'; GRANT ALL ON DATABASE myapp TO myapp;"
Тепер база доступна на localhost:26257, веб-інтерфейс — на localhost:8080.
Як налаштувати production кластер з трьох нод?
На кожній ноді генеруйте сертифікати та запускайте процес. Потім ініціалізуйте кластер:
cockroach start \
--certs-dir=/etc/cockroachdb/certs \
--advertise-addr=10.0.0.1 \
--join=10.0.0.1,10.0.0.2,10.0.0.3 \
--store=/var/lib/cockroachdb \
--background
cockroach init --certs-dir=/etc/cockroachdb/certs --host=10.0.0.1
Вартість експлуатації кластера залежить від вибраних інстансів та регіону. За нашими оцінками, міграція окупається за рахунок відмови від ручного шардування.
Як адаптувати схему даних?
Синтаксис майже ідентичний PostgreSQL, але використовуйте UUID замість SERIAL:
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email STRING NOT NULL UNIQUE,
name STRING NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE TABLE orders (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL REFERENCES users(id),
status STRING NOT NULL DEFAULT 'pending',
total DECIMAL(10,2) NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
INDEX idx_orders_user (user_id, created_at DESC),
INDEX idx_orders_status (status, created_at DESC)
);
Як налаштувати multi-region deployment?
Для глобальних застосунків увімкніть geo-партиціонування:
ALTER DATABASE myapp SET PRIMARY REGION 'eu-central-1';
ALTER DATABASE myapp ADD REGION 'us-east-1';
ALTER DATABASE myapp ADD REGION 'ap-southeast-1';
ALTER TABLE users SET LOCALITY REGIONAL BY ROW;
Кожен рядок зберігається ближче до користувача — crdb_region визначається автоматично.
Як уникнути помилок серіалізації в CockroachDB?
CockroachDB використовує оптимістичне блокування, тому при конкурентному доступі виникає помилка 40001. Додайте retry-логіку з exponential backoff. Приклад на TypeScript з драйвером pg:
import { Pool } from 'pg'
const pool = new Pool({
connectionString: process.env.DATABASE_URL,
max: 25,
idleTimeoutMillis: 30000,
connectionTimeoutMillis: 5000,
})
async function withRetry<T>(fn: () => Promise<T>, maxRetries = 3): Promise<T> {
for (let attempt = 0; attempt < maxRetries; attempt++) {
try {
return await fn()
} catch (err: any) {
if (err.code === '40001' && attempt < maxRetries - 1) {
const delay = Math.min(100 * Math.pow(2, attempt), 2000)
await new Promise(r => setTimeout(r, delay + Math.random() * 100))
continue
}
throw err
}
}
throw new Error('max retries exceeded')
}
async function transferFunds(fromId: string, toId: string, amount: number) {
return withRetry(async () => {
const client = await pool.connect()
try {
await client.query('BEGIN')
const { rows: [from] } = await client.query(
'SELECT balance FROM accounts WHERE id = $1 FOR UPDATE', [fromId]
)
if (from.balance < amount) throw new Error('insufficient funds')
await client.query('UPDATE accounts SET balance = balance - $1 WHERE id = $2', [amount, fromId])
await client.query('UPDATE accounts SET balance = balance + $1 WHERE id = $2', [amount, toId])
await client.query('COMMIT')
} catch (e) {
await client.query('ROLLBACK')
throw e
} finally {
client.release()
}
})
}
Retry-логіка критична. Правильна реалізація гарантує виконання транзакції без втрати даних.
Додаткові рекомендації
Після розгортання кластера обов'язково налаштуйте моніторинг за допомогою Prometheus та Grafana. CockroachDB експортує метрики на порт 8080. Також заплануйте регулярні резервні копії за допомогою cockroach backup. Це забезпечить швидке відновлення при збоях.
Типові помилки при впровадженні CockroachDB
- Використання INTEGER ID — створює гарячі точки. Замінюйте на UUID.
- Відсутність retry-логіки — транзакції будуть падати з помилкою 40001.
- Неправильний вибір регіону — затримки для віддалених користувачів.
- Моніторинг — без нього складно відстежити продуктивність кластера.
Отримайте консультацію по вашому проекту — оцінимо навантаження та запропонуємо конфігурацію.
Що входить в роботу?
| Етап | Що робимо | Результат |
|---|---|---|
| Аналітика | Оцінка навантаження, схеми, вимог до георозподілу | План міграції |
| Проектування | Вибір конфігурації нод, топологія кластера | Схема інфраструктури |
| Розгортання | Встановлення CockroachDB, налаштування TLS, моніторингу | Робочий кластер |
| Міграція даних | Перенесення схеми та даних з мінімальним downtime | Працююча база |
| Оптимізація | Налаштування індексів, параметрів кластера, retry-логіки | Продуктивність під навантаженням |
| Документація | Інструкції для розробників, runbook для адмінів | Готовий комплект |
Строки
| Конфігурація | Строк |
|---|---|
| Одно вузловий кластер (dev) | 1 день |
| Три вузловий кластер в одному регіоні | 2–3 дні |
| Multi-region з geo-партиціонуванням | 3–5 днів |
| Повна міграція з PostgreSQL | 1–2 тижні |
Ми займаємося налаштуванням розподілених баз більше 5 років і реалізували 30+ проектів на CockroachDB. Гарантуємо відмовостійкість 99.99% і повне супроводження після впровадження. Зв'яжіться з нами для безкоштовної консультації — оцінимо ваш проект та запропонуємо оптимальне рішення. Замовте аудит вашої бази — ми підберемо оптимальну конфігурацію CockroachDB.







