Neon vs PlanetScale vs Turso в 2026: какую serverless-базу данных выбрать
Содержание
Serverless-базы данных радикально изменили подход к работе с данными: вместо управления серверами, репликами и резервными копиями разработчик получает API-endpoint и платит только за реальное использование. В 2026 году три платформы доминируют в этой нише: Neon (serverless PostgreSQL с branching и scale-to-zero), PlanetScale (распределённая MySQL на базе Vitess) и Turso (edge SQLite на базе libSQL). Каждая из них предлагает уникальную архитектуру, ценовую модель и набор возможностей, и выбор между ними — одно из ключевых архитектурных решений при старте нового проекта.
За последний год произошли значительные изменения: Databricks приобрела Neon за ~$1 млрд (май 2025), PlanetScale запустила поддержку PostgreSQL в дополнение к MySQL (сентябрь 2025), а Turso представила Turso Database — полную переработку SQLite на Rust. Всё это делает выбор одновременно более интересным и более сложным.
Эта статья — детальное техническое сравнение трёх ведущих serverless-баз данных по всем критически важным параметрам: архитектура, модель данных, branching, edge-доступ, ценообразование, SDK и интеграции. Мы приведём примеры кода, сравнительную таблицу и конкретные рекомендации по выбору. Статья адресована бэкенд-разработчикам, фулстек-инженерам и архитекторам, которые выбирают базу данных для нового проекта или оценивают миграцию с текущего решения.
Обзор Neon: serverless PostgreSQL с branching
Neon — serverless-платформа для PostgreSQL с полным разделением вычислений (compute) и хранилища (storage). Основана в 2021 году командой, включающей бывших инженеров PostgreSQL и Citus. В мае 2025 года Databricks объявила о приобретении Neon за ~$1 млрд, что стало крупнейшей сделкой в истории serverless-баз данных. На момент приобретения у Neon было более 18 000 клиентов, включая OpenAI, Adobe, Replit и Vercel. Примечательно, что свыше 80% баз данных на платформе были созданы автоматически AI-агентами, а не людьми.
Ключевые характеристики Neon:
- PostgreSQL-совместимость — каждый проект получает полноценный PostgreSQL с поддержкой расширений (pgvector, PostGIS, pg_cron и десятки других). Neon поддерживает PostgreSQL 14, 15, 16, 17 и 18.
- Scale-to-zero — compute автоматически выключается при отсутствии активности (таймаут 5 минут на бесплатном плане, настраиваемый на платных) и включается при следующем запросе. Это кардинально снижает стоимость для dev/staging-окружений и периодически используемых баз.
- Branching — ключевая инновация Neon. Ветвление базы данных работает аналогично Git: вы создаёте branch от production и получаете полную копию данных за доли секунды благодаря copy-on-write. Branches идеальны для preview-окружений, тестирования миграций и CI/CD.
- Autoscaling — compute масштабируется от 0.25 CU (Compute Unit) до 10 CU в зависимости от нагрузки. На бесплатном плане — до 2 CU.
- Serverless driver — специальный драйвер
@neondatabase/serverlessдля работы из edge/serverless-окружений через HTTP и WebSocket вместо TCP. - Open Source — ядро Neon (storage engine, pageserver, safekeeper) доступно на GitHub под лицензией Apache 2.0.
В августе 2025 года Neon радикально обновила ценообразование: стоимость хранилища снизилась на 80% (с $1.75 до $0.35 за ГБ/мес), compute — на 15–25%. Минимальная стоимость платного плана — $5/мес. Бесплатный план включает 100 CU-часов в месяц (удвоены в октябре 2025), 0.5 ГБ хранилища на проект и неограниченное число branches.
Обзор PlanetScale: распределённая MySQL на Vitess
PlanetScale — облачная платформа баз данных, построенная на Vitess — системе горизонтального шардинга MySQL, которая была разработана в YouTube для обслуживания миллиардов запросов в день. PlanetScale основана в 2018 году создателями Vitess, включая Сэма Ламберта и Шрабана Бандопадхайя. Среди клиентов — Shopify, Twitch, GitHub и Slack.
Ключевые характеристики PlanetScale:
- MySQL-совместимость — PlanetScale говорит на MySQL wire protocol. Любой MySQL-клиент, ORM или инструмент (Prisma, Drizzle, Sequelize, Laravel Eloquent) работает без изменений. С сентября 2025 года также поддерживается PostgreSQL.
- Non-blocking schema changes — главная инновация PlanetScale. Схема изменяется без блокировки таблиц, без даунтайма и с возможностью отката. Под капотом используется
gh-ostи внутренний инструмент schema diffing. - Database branching — аналогично Neon, PlanetScale поддерживает ветвление для схемы базы данных. Однако ветвь PlanetScale клонирует только схему (DDL), а не данные, что делает её более подходящей для workflow миграций.
- Горизонтальный шардинг — Vitess автоматически распределяет данные по шардам. Это единственная из трёх платформ, которая нативно поддерживает горизонтальное масштабирование на запись.
- Query Insights — встроенная аналитика запросов: медленные запросы, полные сканы, неиспользуемые индексы.
- Serverless driver —
@planetscale/database— Fetch API-совместимый драйвер для edge/serverless-окружений.
В марте 2024 года PlanetScale убрала бесплатный Hobby-план, что вызвало волну критики в сообществе. На момент 2026 года минимальная стоимость — Scaler Pro от ~$39/мес за базу данных. В базовый план входят 10 ГБ хранилища, 3 инстанса (primary + 2 реплики) и ~1440 часов development-branch-времени.
Обзор Turso: edge SQLite на базе libSQL
Turso — serverless-платформа баз данных, построенная на libSQL — форке SQLite с открытым исходным кодом и открытыми контрибуциями. Turso основана в 2022 году командой ChiselStrike, включая Глаубера Косту (бывший инженер ScyllaDB). Архитектура Turso принципиально отличается от Neon и PlanetScale: вместо одного центрального кластера Turso реплицирует базу данных на edge-локации по всему миру, обеспечивая субмиллисекундную задержку чтения.
Ключевые характеристики Turso:
- SQLite-совместимость — libSQL полностью совместим с SQLite и добавляет возможности, которых нет в оригинальном SQLite: нативный векторный поиск, ALTER TABLE расширения, серверный режим работы. Любое приложение, использующее SQLite, может мигрировать на Turso без изменений.
- Edge-репликация — primary-база работает в домашнем регионе, а реплики автоматически распределяются по edge-локациям через инфраструктуру Fly.io. Чтение из ближайшей реплики обеспечивает задержку <10 мс для пользователей по всему миру.
- Embedded Replicas — уникальная возможность Turso: встроенная реплика базы данных внутри вашего приложения (на VPS, в контейнере, на мобильном устройстве). Чтение идёт из локальной SQLite-копии (микросекунды), запись — через remote primary, с автоматической синхронизацией.
- Database-per-tenant — благодаря лёгкости SQLite, Turso позволяет создавать тысячи изолированных баз данных (по одной на каждого пользователя/тенанта). Это идеальная архитектура для мультитенантных SaaS.
- Copy-on-Write branching — мгновенное создание ветвей базы данных для тестирования и preview-окружений.
- Turso Database (Rust rewrite) — в 2025 году Turso начала разработку полной переписки SQLite на Rust с поддержкой конкурентной записи, асинхронного ввода-вывода и максимальной плотности баз данных. На момент 2026 года — в активной разработке, но libSQL остаётся production-ready.
Ценообразование Turso ориентировано на массовое использование: план Starter за $4.99/мес включает до 500 активных баз данных, 9 ГБ хранилища и 1 млрд чтений/мес. Бесплатный план включает 3 базы данных, 1 ГБ хранилища и 1 млрд чтений.
Сравнение архитектуры и модели данных
Фундаментальное различие между тремя платформами — в базовом движке и модели данных.
Neon (PostgreSQL) предлагает полноценную реляционную СУБД с поддержкой JOIN-ов, транзакций ACID, триггеров, хранимых процедур, оконных функций, CTE, LATERAL JOIN и сотен расширений. PostgreSQL — самый мощный из трёх движков, но и самый тяжёлый: cold start Neon занимает 500–3000 мс в зависимости от конфигурации.
PlanetScale (MySQL/Vitess) предоставляет MySQL-совместимость с ограничениями, обусловленными Vitess: нет поддержки внешних ключей (foreign keys) в distributed mode, ограничения на некоторые DDL-операции, отличия в поведении некоторых MySQL-функций. Взамен вы получаете горизонтальное масштабирование и zero-downtime schema changes.
Turso (SQLite/libSQL) — самый лёгкий движок. SQLite не поддерживает конкурентную запись (одна запись за раз), имеет ограниченный набор типов данных (TEXT, INTEGER, REAL, BLOB, NULL) и не поддерживает хранимые процедуры. Зато SQLite — самая быстрая СУБД для чтения, с минимальным потреблением ресурсов и нулевой задержкой при embedded replicas.
Таблица: SQL-возможности
| Возможность | Neon (PostgreSQL) | PlanetScale (MySQL/Vitess) | Turso (SQLite/libSQL) |
|---|---|---|---|
| JOIN-ы | Полная поддержка | Полная поддержка | Полная поддержка |
| Foreign Keys | Да | Нет (Vitess distributed) | Да |
| Транзакции ACID | Полные | Полные | Полные (WAL mode) |
| Хранимые процедуры | PL/pgSQL, PL/Python и др. | SQL, JavaScript (Enterprise) | Нет |
| JSON-поддержка | JSONB (индексируемый) | JSON | JSON |
| Векторный поиск | pgvector | Нет (нативно) | libSQL native vectors |
| Расширения | 100+ (PostGIS, TimescaleDB и др.) | Нет | Нет |
| Полнотекстовый поиск | tsvector/tsquery | FULLTEXT index | FTS5 |
| Конкурентная запись | Да (MVCC) | Да (InnoDB) | Нет (один writer) |
| Типы данных | 40+ типов | 20+ типов | 5 типов |
Примеры кода: подключение и запросы
Рассмотрим, как подключиться к каждой платформе из serverless/edge-окружения и выполнить базовые операции.
Neon: serverless driver для edge-функций
// Neon: подключение из Vercel Edge Function
import { neon } from '@neondatabase/serverless';
// HTTP-режим — идеален для serverless (один запрос = один HTTP-вызов)
const sql = neon(process.env.DATABASE_URL!);
export default async function handler(req: Request) {
// Простой SELECT — безопасен от SQL-инъекций через tagged template
const users = await sql`
SELECT id, name, email, created_at
FROM users
WHERE role = ${'admin'}
ORDER BY created_at DESC
LIMIT 10
`;
// INSERT с возвратом
const [newUser] = await sql`
INSERT INTO users (name, email, role)
VALUES (${'Алексей'}, ${'alex@example.com'}, ${'developer'})
RETURNING id, name, email
`;
return Response.json({ users, newUser });
}
// Neon: branching через API (CI/CD-интеграция)
import { NeonClient } from 'neon-sdk';
const neonClient = new NeonClient({ TOKEN: process.env.NEON_API_KEY! });
// Создать branch от production для preview-окружения
const { data: branch } = await neonClient.branch.createProjectBranch(
process.env.NEON_PROJECT_ID!,
{
branch: {
name: `preview-${process.env.PR_NUMBER}`,
parent_id: 'br-main-abc123' // ID production branch
}
}
);
console.log(`Preview branch created: ${branch.branch.id}`);
console.log(`Connection string: ${branch.connection_uris[0].connection_uri}`);
PlanetScale: serverless driver для edge-функций
// PlanetScale: подключение из Cloudflare Worker
import { connect } from '@planetscale/database';
const conn = connect({
host: process.env.DATABASE_HOST,
username: process.env.DATABASE_USERNAME,
password: process.env.DATABASE_PASSWORD,
});
export default {
async fetch(request: Request): Promise<Response> {
// SELECT с параметрами
const { rows: users } = await conn.execute(
'SELECT id, name, email, created_at FROM users WHERE role = ? ORDER BY created_at DESC LIMIT 10',
['admin']
);
// INSERT
const { insertId } = await conn.execute(
'INSERT INTO users (name, email, role) VALUES (?, ?, ?)',
['Алексей', 'alex@example.com', 'developer']
);
// Non-blocking schema change через CLI:
// pscale deploy-request create my-db main --from dev-branch
return Response.json({ users, insertId });
}
};
Turso: libSQL client с embedded replicas
// Turso: подключение с embedded replica (VPS/контейнер)
import { createClient } from '@libsql/client';
// Embedded replica: чтение из локального файла, запись через remote
const client = createClient({
url: 'file:local-replica.db', // локальная SQLite-реплика
syncUrl: process.env.TURSO_DATABASE_URL!, // remote primary
authToken: process.env.TURSO_AUTH_TOKEN!,
syncInterval: 60000, // синхронизация каждые 60 секунд
});
// Первоначальная синхронизация
await client.sync();
// Чтение — из локальной реплики (микросекунды)
const users = await client.execute({
sql: 'SELECT id, name, email, created_at FROM users WHERE role = ? ORDER BY created_at DESC LIMIT 10',
args: ['admin'],
});
// Запись — через remote primary с автоматической синхронизацией
await client.execute({
sql: 'INSERT INTO users (name, email, role) VALUES (?, ?, ?)',
args: ['Алексей', 'alex@example.com', 'developer'],
});
// Vectorный поиск (встроенный в libSQL)
const similar = await client.execute({
sql: `SELECT id, content, vector_distance_cos(embedding, ?) as distance
FROM articles
ORDER BY distance ASC
LIMIT 5`,
args: [JSON.stringify([0.1, 0.2, 0.3 /* ... 1536 dimensions */])],
});
// Turso: подключение из serverless/edge (без embedded replica)
import { createClient } from '@libsql/client/web';
const client = createClient({
url: process.env.TURSO_DATABASE_URL!,
authToken: process.env.TURSO_AUTH_TOKEN!,
});
export default async function handler(req: Request) {
const result = await client.execute('SELECT * FROM users LIMIT 10');
return Response.json(result.rows);
}
Сравнительная таблица: Neon vs PlanetScale vs Turso
| Критерий | Neon | PlanetScale | Turso |
|---|---|---|---|
| Движок | PostgreSQL 14–18 | MySQL (Vitess) + PostgreSQL | SQLite (libSQL) |
| Архитектура | Разделение compute/storage | Распределённый шардинг (Vitess) | Edge-репликация |
| Scale-to-zero | Да (5 мин на free) | Нет | Нет (databases always on) |
| Branching | Данные + схема (copy-on-write) | Только схема (DDL) | Данные + схема (copy-on-write) |
| Edge-доступ | HTTP/WebSocket driver | HTTP driver (Fetch API) | Embedded replicas + HTTP |
| Cold start | 500–3000 мс | Нет (always-on) | Нет (always-on) |
| Горизонтальный шардинг | Нет | Да (Vitess) | Нет (database-per-tenant) |
| Макс. размер БД | Без ограничений (по плану) | Без ограничений (по плану) | 100 ГБ на БД |
| Бесплатный план | Да (100 CU-часов, 0.5 ГБ) | Нет | Да (3 БД, 1 ГБ) |
| Мин. платный план | $5/мес (Launch) | ~$39/мес (Scaler Pro) | $4.99/мес (Starter) |
| Стоимость хранилища | $0.35/ГБ-мес | $0.50/ГБ (после 10 ГБ) | Включено в план (9 ГБ) |
| Serverless driver | @neondatabase/serverless | @planetscale/database | @libsql/client |
| ORM-поддержка | Prisma, Drizzle, Kysely, Knex | Prisma, Drizzle, Sequelize, Eloquent | Drizzle, Prisma (adapter) |
| Open Source | Да (Apache 2.0) | Vitess — да, платформа — нет | Да (libSQL — MIT) |
| Владелец | Databricks (c 2025) | Независимая компания | Независимая компания |
| Регионы | AWS (15+ регионов), Azure | AWS, GCP | 30+ edge-локаций (Fly.io) |
Производительность и задержки
Производительность serverless-баз данных зависит от множества факторов: географии, типа запроса, режима подключения и нагрузки. Вот ключевые характеристики каждой платформы.
Neon обеспечивает задержку 5–15 мс для простых SELECT-запросов при подключении через serverless driver в том же регионе. Однако после периода бездействия cold start может добавить 500–3000 мс к первому запросу. Для production-нагрузок рекомендуется установить suspend_timeout в 0 (never suspend) или использовать autoscaling с минимумом 0.25 CU.
PlanetScale демонстрирует стабильно низкую задержку: простые SELECT-запросы выполняются за 5–10 мс, а максимальная задержка в бенчмарках держится ниже 67 мс. Отсутствие cold start — значительное преимущество для production-нагрузок.
Turso с embedded replicas обеспечивает рекордную задержку чтения — менее 1 мс, поскольку данные читаются из локальной SQLite-копии. При использовании edge-реплик без embedded режима — 5–10 мс благодаря близости к пользователю. Запись идёт через primary и занимает 20–50 мс в зависимости от региона.
Branching и CI/CD-интеграция
Branching — одна из определяющих возможностей serverless-баз данных, и каждая платформа реализует его по-своему.
Neon предлагает самый мощный branching: ветвь включает полную копию данных и схемы, создаётся мгновенно благодаря copy-on-write и не занимает дополнительное хранилище до тех пор, пока данные не изменены. Это позволяет создавать preview-окружение для каждого pull request с реальными данными production-базы. Neon интегрируется с Vercel (автоматическое создание branch при деплое preview), GitHub Actions и любой CI/CD-системой через API.
PlanetScale реализует branching иначе: ветвь клонирует только схему (DDL), а не данные. Это делает PlanetScale-branching инструментом для workflow миграций: вы вносите изменения в схему на development-ветви, тестируете их, а затем создаёте deploy request (аналог pull request) для слияния с production. PlanetScale показывает schema diff, проверяет обратную совместимость и применяет изменения без даунтайма.
Turso поддерживает copy-on-write branching, аналогичный Neon: ветвь включает полную копию данных и создаётся мгновенно. Однако экосистема CI/CD-интеграций Turso менее развита по сравнению с Neon.
Когда выбрать Neon
Neon — лучший выбор, если ваш проект соответствует одному или нескольким критериям:
- PostgreSQL — ваша основная СУБД. Если команда привыкла к PostgreSQL и использует его расширения (pgvector для AI/ML, PostGIS для геоданных, TimescaleDB для временных рядов), Neon — единственный вариант, который предоставляет полноценный PostgreSQL без компромиссов.
- Preview-окружения для каждого PR. Branching с полной копией данных делает Neon идеальным для CI/CD-пайплайнов, где каждый pull request получает изолированную базу данных с реальными данными.
- Переменная нагрузка и экономия. Scale-to-zero и usage-based pricing ($0.106/CU-час на Launch) позволяют платить только за реальное использование. Dev/staging-базы обходятся в центы.
- AI/ML-приложения. pgvector + PostgreSQL + scale-to-zero — идеальный стек для RAG-приложений и AI-агентов, которые создают тысячи ephemeral-баз данных.
- Стартапы и indie-хакеры. Бесплатный план с 100 CU-часами и 0.5 ГБ позволяет запустить проект без затрат.
Когда выбрать PlanetScale
PlanetScale — лучший выбор в следующих сценариях:
- MySQL-совместимость обязательна. Если проект использует MySQL-специфичный ORM (Laravel Eloquent) или мигрирует с существующего MySQL-сервера, PlanetScale предоставляет бесшовную совместимость.
- Горизонтальное масштабирование на запись. Vitess — единственная из трёх платформ, которая нативно шардирует данные. Если ваш проект обрабатывает миллионы записей в секунду (маркетплейсы, игровые платформы, fintech), PlanetScale — проверенный выбор.
- Zero-downtime schema migrations. Non-blocking schema changes с deploy requests, schema diff и автоматическим откатом — недостижимый уровень безопасности миграций для production.
- Enterprise-проекты. PlanetScale ориентирован на enterprise-клиентов: SLA 99.999%, SOC 2, HIPAA-compliant, выделенные кластеры.
- Мультирегиональное развёртывание. Vitess-кластеры можно развернуть в нескольких регионах AWS или GCP с синхронной репликацией.
Когда выбрать Turso
Turso — лучший выбор в следующих случаях:
- Минимальная задержка чтения по всему миру. Если пользователи распределены глобально и приложение требует субмиллисекундного чтения, embedded replicas Turso не имеют аналогов.
- Database-per-tenant архитектура. SaaS с сотнями или тысячами тенантов, где каждый получает изолированную базу данных. SQLite-лёгкость позволяет Turso держать тысячи БД на одном плане ($4.99/мес за 500 активных БД).
- Edge-first приложения. Если приложение работает на Cloudflare Workers, Vercel Edge Functions или Fly.io, Turso обеспечивает локальное чтение из ближайшей edge-реплики.
- Read-heavy нагрузки. Блоги, CMS, каталоги, справочники — приложения с соотношением чтения/записи 95/5 или выше — идеально ложатся на архитектуру Turso.
- Offline-first и мобильные приложения. Embedded replicas позволяют приложению работать автономно, синхронизируясь с облаком при наличии соединения.
- Бюджетные ограничения. Turso предлагает самый щедрый платный план: $4.99/мес за 500 баз данных и 9 ГБ хранилища — значительно дешевле конкурентов.
Интеграции с фреймворками и ORM
Все три платформы хорошо интегрируются с современным JavaScript/TypeScript-стеком, но с разной степенью зрелости.
Drizzle ORM поддерживает все три: drizzle-orm/neon-http для Neon, drizzle-orm/planetscale-serverless для PlanetScale, drizzle-orm/libsql для Turso. Пример конфигурации для каждой:
// Drizzle ORM: конфигурация для Neon
import { neon } from '@neondatabase/serverless';
import { drizzle } from 'drizzle-orm/neon-http';
const sql = neon(process.env.DATABASE_URL!);
const db = drizzle(sql);
// Drizzle ORM: конфигурация для PlanetScale
import { connect } from '@planetscale/database';
import { drizzle } from 'drizzle-orm/planetscale-serverless';
const connection = connect({ url: process.env.DATABASE_URL! });
const db = drizzle(connection);
// Drizzle ORM: конфигурация для Turso
import { createClient } from '@libsql/client';
import { drizzle } from 'drizzle-orm/libsql';
const client = createClient({
url: process.env.TURSO_DATABASE_URL!,
authToken: process.env.TURSO_AUTH_TOKEN!,
});
const db = drizzle(client);
Prisma поддерживает Neon и PlanetScale нативно, а для Turso использует driver adapter (@prisma/adapter-libsql). Next.js, Astro, Nuxt, SvelteKit и Remix имеют официальные интеграции или примеры для всех трёх платформ.
Заключение
Выбор между Neon, PlanetScale и Turso — это прежде всего выбор архитектурной парадигмы:
Neon — для тех, кто делает ставку на PostgreSQL и его экосистему. Branching с данными, scale-to-zero, pgvector для AI/ML и приобретение Databricks делают Neon наиболее перспективной платформой для стартапов и AI-приложений. Слабые стороны — cold start и отсутствие горизонтального шардинга.
PlanetScale — для enterprise-проектов с MySQL-стеком, требующих горизонтального масштабирования и безопасных миграций. Zero-downtime schema changes и Vitess-шардинг не имеют аналогов. Слабые стороны — отсутствие бесплатного плана, высокая минимальная стоимость и ограничения Vitess (нет foreign keys).
Turso — для edge-first приложений, database-per-tenant SaaS и глобально распределённых read-heavy нагрузок. Embedded replicas и архитектура SQLite обеспечивают рекордную задержку чтения при минимальной стоимости. Слабые стороны — ограничения SQLite (один writer, ограниченные типы данных) и менее зрелая экосистема.
Ни одна из трёх платформ не является универсально лучшей — каждая решает свой класс задач. Определите приоритеты вашего проекта (SQL-движок, latency, масштабируемость, бюджет, CI/CD-workflow) и выбирайте инструмент, который наиболее точно соответствует вашим требованиям.
Источники
- Neon — официальный сайт и документация
- PlanetScale — официальный сайт и документация
- Turso — официальный сайт и документация
- Databricks приобретает Neon за ~$1 млрд — TechCrunch
- PlanetScale запускает PostgreSQL — InfoQ
- Distributed SQLite: Why LibSQL and Turso are the New Standard in 2026 — DEV Community
- Serverless Databases 2025: Neon vs PlanetScale vs TiDB — Markaicode
- Neon serverless driver — GitHub
- PlanetScale database-js driver — GitHub
- libSQL client TypeScript SDK — GitHub