serverless-databases · 16 мин чтения

Neon vs PlanetScale vs Turso в 2026: какую serverless-базу данных выбрать

Neon PlanetScale Turso serverless база данных Neon PostgreSQL branching PlanetScale Vitess Turso edge SQLite
Содержание

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 (индексируемый)JSONJSON
Векторный поискpgvectorНет (нативно)libSQL native vectors
Расширения100+ (PostGIS, TimescaleDB и др.)НетНет
Полнотекстовый поискtsvector/tsqueryFULLTEXT indexFTS5
Конкурентная записьДа (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

КритерийNeonPlanetScaleTurso
ДвижокPostgreSQL 14–18MySQL (Vitess) + PostgreSQLSQLite (libSQL)
АрхитектураРазделение compute/storageРаспределённый шардинг (Vitess)Edge-репликация
Scale-to-zeroДа (5 мин на free)НетНет (databases always on)
BranchingДанные + схема (copy-on-write)Только схема (DDL)Данные + схема (copy-on-write)
Edge-доступHTTP/WebSocket driverHTTP driver (Fetch API)Embedded replicas + HTTP
Cold start500–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, KnexPrisma, Drizzle, Sequelize, EloquentDrizzle, Prisma (adapter)
Open SourceДа (Apache 2.0)Vitess — да, платформа — нетДа (libSQL — MIT)
ВладелецDatabricks (c 2025)Независимая компанияНезависимая компания
РегионыAWS (15+ регионов), AzureAWS, GCP30+ 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) и выбирайте инструмент, который наиболее точно соответствует вашим требованиям.

Источники

  1. Neon — официальный сайт и документация
  2. PlanetScale — официальный сайт и документация
  3. Turso — официальный сайт и документация
  4. Databricks приобретает Neon за ~$1 млрд — TechCrunch
  5. PlanetScale запускает PostgreSQL — InfoQ
  6. Distributed SQLite: Why LibSQL and Turso are the New Standard in 2026 — DEV Community
  7. Serverless Databases 2025: Neon vs PlanetScale vs TiDB — Markaicode
  8. Neon serverless driver — GitHub
  9. PlanetScale database-js driver — GitHub
  10. libSQL client TypeScript SDK — GitHub
← Все статьи