Supabase vs Firebase 2026: сравнение для казахстанских стартапов и команд
Backend-as-a-service платформы позволяют запустить продукт без выделенного DevOps-инженера. В 2026 году три варианта заслуживают серьёзного рассмотрения — особенно с учётом специфики казахстанского рынка: данные пользователей, расчёты в тенге, интеграция с Kaspi Pay.
Одна строка о каждом
- Firebase — зрелый Google BaaS, NoSQL, проприетарный, дорогой при росте
- Supabase — open-source, PostgreSQL, самохостинг, row-level security
- PocketBase — один Go-бинарник, SQLite, нулевая сложность инфраструктуры
Модель данных
Firebase (Firestore)
NoSQL. Нет JOIN — нужно несколько запросов:
// 100 заказов = 101 запрос к базе
const order = await db.collection('orders').doc(orderId).get();
const product = await db.collection('products').doc(order.data().productId).get();
Хорошо работает для chat-like данных. Плохо для финансовых систем с транзакциями.
Supabase (PostgreSQL)
Полноценный SQL с ACID-транзакциями:
// Один JOIN вместо N запросов
const { data } = await supabase
.from('orders')
.select(`
id, total_kzt, status, created_at,
order_items (
quantity,
products ( name, price_kzt, sku )
)
`)
.eq('user_id', userId)
.order('created_at', { ascending: false });
Row Level Security (RLS) — безопасность прямо в базе данных:
-- Пользователи видят только свои заказы — автоматически
CREATE POLICY "own_orders"
ON orders FOR SELECT
USING (auth.uid() = user_id);
-- Продавцы видят только заказы своего магазина
CREATE POLICY "seller_orders"
ON orders FOR SELECT
USING (
EXISTS (
SELECT 1 FROM stores
WHERE stores.id = orders.store_id
AND stores.owner_id = auth.uid()
)
);
PocketBase
SQLite с REST API, один файл:
const records = await pb.collection('orders').getList(1, 20, {
filter: `user = "${userId}"`,
expand: 'items,items.product',
sort: '-created',
});
Аутентификация
| Метод | Firebase | Supabase | PocketBase |
|---|---|---|---|
| Email/Password | ✅ | ✅ | ✅ |
| Google OAuth | ✅ | ✅ | ✅ |
| Apple Sign In | ✅ | ✅ | ✅ |
| OTP/Magic Link | ✅ | ✅ | ✅ |
| Phone (SMS) | ✅ | ✅ | Нет |
| SAML/LDAP | Enterprise | ✅ | Нет |
Supabase SMS auth важен для казахстанских приложений — интеграция с местными SMS-провайдерами.
Realtime
Все три поддерживают realtime. Разница в деталях:
Firebase — fastest realtime, built for it:
onSnapshot(collection(db, 'orders'), snapshot => {
snapshot.docChanges().forEach(change => updateUI(change.doc.data()));
});
Supabase — Postgres → WebSocket + Broadcast + Presence:
supabase.channel('orders')
.on('postgres_changes', { event: 'UPDATE', schema: 'public', table: 'orders' },
payload => updateOrderStatus(payload.new)
)
.subscribe();
PocketBase — SSE, auto-reconnect:
pb.collection('orders').subscribe('*', e => handleChange(e));
Ценообразование: казахстанская перспектива
| MAU | Firebase | Supabase | PocketBase |
|---|---|---|---|
| До 10k | Бесплатно | Бесплатно | ~2 500₸/мес VPS |
| 100k | ~25 000-100 000₸/мес | 11 000₸/мес | ~7 500₸/мес VPS |
| 1M | ~250 000-800 000₸/мес | ~270 000₸+/мес | ~45 000₸/мес VPS |
Firebase очень дорожает при росте. Одна страница с 50 карточками товаров = 50 reads. Высоконагруженное казахстанское e-commerce приложение с тысячами посетителей в день — счёт может быть неожиданным.
Суверенитет данных
Важно для казахстанских проектов: ЗРК «О персональных данных» требует хранения персональных данных казахстанских граждан на серверах в Казахстане (или в странах с надлежащим уровнем защиты).
| Платформа | Серверы в Казахстане | Самохостинг | Экспорт данных |
|---|---|---|---|
| Firebase | Ближайший: Google Europe/Asia | Нет | JSON |
| Supabase Cloud | Нет (EU/US regions) | Да (на своём KZ-сервере) | Полный Postgres dump |
| PocketBase | Да (разверните на KZ VPS) | Да (один бинарник) | SQLite файл |
Для данных, которые должны оставаться в Казахстане: Supabase на собственном VPS или PocketBase — лучшие варианты.
Интеграция с казахстанскими платёжными системами
При работе с Kaspi Pay, Freedom Pay и другими KZ-платёжными системами важна надёжность транзакций:
// Supabase: атомарная транзакция через RPC
const { data, error } = await supabase.rpc('create_paid_order', {
p_user_id: userId,
p_items: items,
p_payment_reference: kaspiPayRef,
p_amount_kzt: amount,
});
-- PostgreSQL функция — атомарно создаёт заказ + списывает баллы
CREATE OR REPLACE FUNCTION create_paid_order(
p_user_id UUID,
p_items JSONB,
p_payment_reference TEXT,
p_amount_kzt NUMERIC
) RETURNS UUID AS $$
DECLARE
v_order_id UUID;
BEGIN
INSERT INTO orders (user_id, payment_ref, total_kzt, status)
VALUES (p_user_id, p_payment_reference, p_amount_kzt, 'paid')
RETURNING id INTO v_order_id;
-- Начисляем баллы программы лояльности (1% от суммы)
UPDATE user_loyalty SET points = points + (p_amount_kzt * 0.01)
WHERE user_id = p_user_id;
RETURN v_order_id;
END;
$$ LANGUAGE plpgsql;
Суть: PostgreSQL транзакции гарантируют атомарность — либо оба действия выполнились, либо ни одного.
Когда что выбирать
Ранний стартап (3-6 месяцев до PMF): → Supabase Free или PocketBase — нулевые затраты, быстрый старт
Продукт с тракцией: → Supabase Pro ($25/мес) — реляционные данные, RLS, предсказуемые расходы
Требования суверенитета данных: → Supabase на KZ VPS или PocketBase — данные остаются в Казахстане
Масштаб + Google Cloud + большой бюджет: → Firebase — самое зрелое решение при неограниченном бюджете
Aunimeda строит production-приложения для казахстанского рынка. Обсудим ваш проект.
Смотрите также: TanStack Query паттерны, Kubernetes для разработчиков