Як налаштувати serverless бази даних: DynamoDB, PlanetScale і Neon?

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Як налаштувати serverless бази даних: DynamoDB, PlanetScale і Neon?
Середній
~3-5 днів
Часті запитання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1358
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1250
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    956
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1188
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    929
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    947

Уявіть: ваш інтернет-магазин на RDS починає гальмувати в піки, а ви переплачуєте за простоюючі ресурси. Serverless бази даних вирішують цю проблему — вони автоматично масштабуються до нуля при простої та тарифікуються за споживанням. Але неправильне проектування схеми зведе економію нанівець: наприклад, часті сканування в DynamoDB можуть обійтися дорожче фіксованої інфраструктури. Ми налаштовуємо serverless БД для високонавантажених проєктів: DynamoDB, PlanetScale і Neon. З 5+ роками досвіду в serverless архітектурах ми впровадили рішення для 50+ проєктів — від e-commerce до IoT.

Згідно з документацією AWS, коректне застосування Single-Table Design знижує кількість операцій читання до 90%.

Чому варто обрати serverless базу даних?

Serverless БД усувають необхідність управління інфраструктурою. Ви не платите за простоюючі ресурси, а масштабування відбувається автоматично. Для проєктів з нерівномірним навантаженням це знижує вартість інфраструктури на 35–40%. Однак неправильне проектування схеми може звести нанівець всі переваги: наприклад, часті сканування в DynamoDB призведуть до високих витрат.

Як вибрати між DynamoDB та PostgreSQL?

Вибір залежить від вашої моделі даних. Якщо вам потрібні складні агрегації, JOIN та транзакції — обирайте Neon (PostgreSQL). Якщо ви маєте справу з високими навантаженнями та простими запитами — DynamoDB з Single-Table Design забезпечить затримку в 5 разів нижчу, ніж MySQL при 1000+ запитів/с.

Чи підходить Serverless для вашого бізнесу?

Serverless архітектура ідеальна для проєктів з нерівномірним навантаженням, де важлива економія ресурсів. Наприклад, для SaaS-продукту з 10 000 користувачів вартість DynamoDB On-Demand складає близько $50/міс., що в 3 рази дешевше за виділений RDS.

Порівняння варіантів

БД Тип Масштаб Найкращий сценарій
DynamoDB Key-value / Document Безлімітний Високе навантаження, передбачувані запити
PlanetScale MySQL-compatible До терабайт Реляційні дані, GitHub-style branching
Neon PostgreSQL Малий-середній Повний SQL, dev environments
FaunaDB Document / Relational Середній Мультирегіональна узгодженість
Upstash Redis Малий-середній Кеш, черги, rate limiting

DynamoDB: проектування під serverless

DynamoDB вимагає думати про доступ до даних до проектування схеми. Погано спроектована таблиця — дорога і повільна. Єдиний правильний підхід — Single-Table Design, коли весь домен зберігається в одній таблиці, а PK/SK кодують тип сутності:

# Схема для e-commerce
# PK           | SK                  | Дані
# USER#u123    | PROFILE             | {name, email}
# USER#u123    | ORDER#o456          | {status, total, items}
# USER#u123    | ORDER#o789          | {status, total, items}
# ORDER#o456   | ITEM#i001           | {product_id, qty, price}
# PRODUCT#p001 | METADATA            | {title, description}

import boto3
from boto3.dynamodb.conditions import Key

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('ecommerce')

def get_user_with_orders(user_id: str) -> dict:
    response = table.query(
        KeyConditionExpression=Key('PK').eq(f'USER#{user_id}') &
                               Key('SK').begins_with('ORDER#')
    )
    return response['Items']

def put_order(user_id: str, order: dict):
    with table.batch_writer() as batch:
        batch.put_item(Item={
            'PK': f'USER#{user_id}',
            'SK': f'ORDER#{order["id"]}',
            **order
        })
        batch.put_item(Item={
            'PK': f'ORDER#{order["id"]}',
            'SK': 'METADATA',
            'GSI1PK': f'STATUS#{order["status"]}',
            'GSI1SK': order['created_at'],
            **order
        })

Global Secondary Index (GSI) — для альтернативних патернів доступу, наприклад, отримати всі замовлення за статусом.

DynamoDB On-Demand vs Provisioned

On-Demand: платиш за кожен read/write. Немає планування потужності. Ідеально для unpredictable трафіку або нових застосунків.

Provisioned + Auto Scaling: задаєш baseline RCU/WCU, автомасштабування при піках. Дешевше при передбачуваному навантаженні.

resource "aws_dynamodb_table" "ecommerce" {
  name           = "ecommerce"
  billing_mode   = "PAY_PER_REQUEST"  # On-demand
  hash_key       = "PK"
  range_key      = "SK"

  attribute {
    name = "PK"
    type = "S"
  }
  attribute {
    name = "SK"
    type = "S"
  }
  attribute {
    name = "GSI1PK"
    type = "S"
  }
  attribute {
    name = "GSI1SK"
    type = "S"
  }

  global_secondary_index {
    name            = "GSI1"
    hash_key        = "GSI1PK"
    range_key       = "GSI1SK"
    projection_type = "ALL"
  }

  ttl {
    attribute_name = "expires_at"
    enabled        = true
  }
}

Neon: Serverless PostgreSQL

Neon розділяє compute і storage. Compute масштабується до нуля при відсутності активності, storage оплачується за обсягом. Вбудований branching дозволяє створювати ізольовані середовища за секунди.

import psycopg2
import os

conn = psycopg2.connect(os.environ['DATABASE_URL'])

with conn.cursor() as cur:
    cur.execute("SELECT * FROM orders WHERE user_id = %s", (user_id,))
    orders = cur.fetchall()

Branching в Neon:

neon branches create --name feature/new-schema --parent main
neon connection-string feature/new-schema
# → postgresql://user:[email protected]/neondb

PlanetScale

MySQL-сумісний сервіс з branching workflow, без foreign key constraints (vitess-based). Використовує HTTP-протокол, що особливо добре для Lambda:

import { connect } from '@planetscale/database'

const conn = connect({
  host: process.env.DATABASE_HOST,
  username: process.env.DATABASE_USERNAME,
  password: process.env.DATABASE_PASSWORD
})

const results = await conn.execute(
  'SELECT * FROM orders WHERE user_id = ?',
  [userId]
)

Як налаштувати connection pooling для Lambda: покрокова інструкція

  1. Визначте тип БД: для RDS використовуйте RDS Proxy, для Neon — вбудований pooler, для PlanetScale — HTTP-протокол вже вирішує проблему.
  2. Для PostgreSQL з PgBouncer: розгорніть PgBouncer поруч з Lambda (наприклад, у VPC), налаштуйте pool_mode = transaction.
  3. При використанні Prisma: замініть прямі підключення на Prisma Accelerate через змінну середовища DATABASE_URL.
  4. Перевірте кількість одночасних з'єднань: для 100 Lambda-функцій знадобиться близько 20 з'єднань у пулі.
  5. Протестуйте cold start: перший запит після простою не повинен перевищувати 300 мс.

Connection pooling для Lambda

Lambda створює нове з'єднання при кожному cold start. При 100 concurrent Lambda — 100 з'єднань. Це вбиває PostgreSQL/MySQL. Рішення:

Рішення Опис Найкраще для
RDS Proxy (AWS) Connection pooler перед RDS, прозорий Застосунків на RDS
PgBouncer Self-hosted, перед PostgreSQL Будь-який PostgreSQL, тонкий тюнінг
Neon/PlanetScale Вбудований pooling Managed сервіси, Zero config
Prisma Accelerate Pooler + query cache Stack на Prisma

Кейс: міграція замовника з RDS на Neon

Проєкт: інтернет-магазин з сезонними піками (Чорна п'ятниця). База даних — PostgreSQL 13 на RDS. Середнє навантаження — 2000 запитів/с, у піку — 15 000. RDS не справлявся, доводилося тримати надлишкові потужності.

Рішення: міграція на Neon з PostgreSQL 15. Підсумки:

  • Вартість інфраструктури знизилася на 35% (з 450 000 до 290 000 ₴/міс).
  • Cold start (після перерви) — 200 мс проти колишніх 2 с на RDS (в 10 разів швидше).
  • Час індексації нових даних скоротився втричі завдяки паралельним операціям.
  • Команда отримала можливість створювати гілки для кожного PR, що прискорило розробку.

Що входить у роботу

  • Проектування схеми (Single-Table Design для DynamoDB, нормалізація для Neon/PlanetScale).
  • Налаштування connection pooling (RDS Proxy, PgBouncer, вбудований).
  • Оптимізація запитів (індекси, GSIs, бенчмарки).
  • CI/CD для branching (автоматичне створення гілок при пулл-реквестах).
  • Документація схеми та інструкції для команди.
  • Навчання розробників (ваші інженери зможуть самостійно вносити зміни).
  • Гарантія підтримки протягом 30 днів після здачі.

Орієнтовні терміни

  • DynamoDB single-table design + базові операції — 3-5 днів.
  • Neon / PlanetScale підключення + pooling — 1-2 дні.
  • Міграція існуючої БД на serverless — 5-14 днів.

Терміни варіюються залежно від складності схеми та обсягу даних. Отримайте консультацію щодо вашого проєкту — зв'яжіться з нами для оцінки. Ми підберемо оптимальне рішення та запропонуємо план робіт.

Детальний приклад розрахунку вартості

Для проєкту з 10 000 активних користувачів і 100 000 запитів/день вартість DynamoDB On-Demand становить близько $50/міс., що в 3 рази дешевше за виділений RDS з аналогічною продуктивністю.

Serverless-розробка: AWS Lambda, Vercel Functions, Cloudflare Workers, Edge — досвід 7+ років

Ми займаємося serverless-розробкою — проєктуємо, реалізуємо та оптимізуємо рішення на AWS Lambda, Vercel Functions та Cloudflare Workers. Маємо сертифікати AWS та досвід масштабування до 1 млн запитів на день. Оцінимо ваш проєкт безкоштовно — зв’яжіться з нами.

Serverless не означає «без сервера». Сервери є — ви просто не керуєте ними. Правильніше читати це як «без менеджменту серверів»: немає патчінгу ОС, немає налаштування nginx, немає моніторингу дискового простору. Функція отримує подію, обробляє, повертає відповідь. Провайдер вирішує, на чому це запустити.

AWS Lambda: потужність та операційна складність

Lambda — найзріліша платформа з найбільшим набором тригерів: API Gateway, SQS, SNS, S3, DynamoDB Streams, EventBridge. Це важливо для складних event-driven архітектур.

Cold start — головний біль Lambda на Node.js: від 200ms до 1.5s залежно від розміру бандлу та VPC. У VPC холодний старт історично сягав 10 секунд, зараз покращено, але він все ще довший. Для production-функцій з latency-вимогами: Provisioned Concurrency (тримає інстанси прогрітими), SnapStart для Java, мінімізація бандлу через tree-shaking.

Практичний кейс: функція обробки завантажуваних зображень (ресайз, WebP-конвертація, завантаження в S3). Бандл з sharp важив 40MB через нативні бінарники. Рішення — Lambda Layer з sharp, основна функція 800KB. Cold start впав з 3.2s до 400ms — економія становить 87%.

Lambda Layers — спільні залежності між функціями. До 5 шарів на функцію, кожен до 250MB. Стандартна практика: layer з heavy dependencies (sharp, puppeteer, ffmpeg), layer з спільною бізнес-логікою. Інфраструктура Lambda через AWS CDK або Terraform.

Параметр AWS Lambda Vercel Functions Cloudflare Workers
Runtime Node.js, Python, Go, Java, .NET (up to 15 min) Node.js (up to 300s) V8 Isolates (no Node.js API)
Cold start 200ms–1.5s (Node.js) ~200ms (Node.js) <1ms
Безкоштовний ліміт 1M запитів/міс 100k запитів/міс 100k запитів/день
Реґіони AWS Regions (30+) Vercel Edge (120+) Cloudflare (300+)

Vercel Functions та Edge Runtime

Vercel Functions — це Lambda під капотом (us-east-1 за замовчуванням), але з мінімальним порогом входу для Next.js-проєктів. API Routes і Route Handlers деплояться автоматично. Serverless функції на Node.js runtime з лімітом в 300 секунд на Vercel Pro.

Edge Runtime принципово інший: функція запускається на V8 isolate в найближчій до користувача точці CDN-мережі Vercel (120+ регіонів). Немає cold start як такого — isolate стартує за ~0ms. Але жорсткі обмеження: немає Node.js API (fs, crypto через Web API), немає доступу до баз даних через TCP (тільки через HTTP API), розмір бандлу до 4MB.

Edge Runtime ідеальний для: middleware (auth check, redirect, A/B test), трансформації відповідей, геолокаційної логіки, Edge Config. Не підходить для: звернення до PostgreSQL, важких обчислень, роботи з файловою системою.

Cloudflare Workers: справжній Edge

Workers запускаються на V8 isolates в 300+ точках присутності Cloudflare. Latency для користувача — буквально найближчий дата-центр. Cold start < 1ms. Workers Durable Objects вирішують проблему стану в Edge: кожен Durable Object — це одна точка координації, виконується в одному регіоні. Ідеально для: ігрових кімнат, документів з реальним часом, rate limiting без гонок.

Workers KV — eventually consistent сховище. Запис поширюється по всіх регіонах за ~60 секунд. Не підходить для фінансових транзакцій, підходить для конфігів, feature flags, кешу.

D1 — SQLite на Edge. На одній репліці для читання працює відмінно, write latency залежить від відстані до primary регіону. Для глобальних write-heavy додатків — не найкращий вибір.

Ecosystem: Hono.js — мінімалістичний роутер, що працює на Workers, Deno, Bun, Node.js. Якщо потрібен єдиний код для Edge і сервера — хороший вибір.

Коли serverless не підходить

Тривалі обчислення (>15 хвилин на Lambda, >30 секунд на Vercel) — потрібен Fargate або звичайний сервер. WebSocket-сервер зі станом — немає постійного процесу. Завдання з частим зверненням до диску — ефемерне storage, /tmp на Lambda 512MB–10GB. Якщо функція викликається тисячі разів на секунду постійно — EC2 або Fargate дешевше.

Vendor lock-in — реальна проблема. Lambda-специфічний код (handler-сигнатура, Lambda context) складно портувати. Hono.js, Remix, або адаптери типу @hono/node-server допомагають тримати логіку portable.

Observability

Без нормального observability serverless — чорний ящик. Стандарт: AWS X-Ray або Powertools for AWS Lambda (structured logging, tracing, metrics з коробки). Для мультихмарного стеку — OpenTelemetry з експортом в Grafana Cloud або Honeycomb. Distributed tracing критичний коли функція А викликає функцію Б через SQS — без trace ID неможливо зчепити логи.

Що входить у роботу

Deliverable Опис
Дизайн архітектури Границі функцій, event-маршрути, вибір провайдера, схеми даних
Реалізація та деплой Код на Python/Node.js/Go, CI/CD (GitHub Actions, Terraform), preview deployments
Оптимізація холодного старту Provisioned Concurrency, Lambda Layers, tree-shaking, ARM
Тестування та моніторинг Unit/integration тести, X-Ray, alarms (CloudWatch), SLA
Документація та навчання README, архітектурні діаграми, інструкції для вашої команди

Процес роботи

Починаємо з аналізу патерну навантаження: якщо трафік непередбачуваний або рідкий — serverless дасть економію; якщо стабільно високий — може виявитися дорожчим. Проєктуємо межі функцій за принципом single responsibility. Розробляємо локально через SST, Wrangler або LocalStack. CI/CD з preview deployments обов’язково.

Технічні вимоги до serverless функції
  • Обмеження пам’яті: Lambda до 10GB, Vercel до 1GB, Workers до 128MB.
  • Диск: /tmp до 10GB (Lambda), відсутній на Edge.
  • Час виконання: Lambda макс 15 хв, Vercel 300 с, Workers 30 с.
  • Бандл: Lambda — до 250MB (зі шарами), Vercel — до 50MB, Workers — до 4MB.

Як оптимізувати cold start в AWS Lambda?

Використовуйте Provisioned Concurrency для критичних функцій, зменшуйте розмір бандлу, обирайте ARM-архітектуру, застосовуйте SnapStart для Java. Для edge-функцій без cold start розгляньте Cloudflare Workers.

Що обрати: Cloudflare Workers чи Vercel Functions?

Якщо потрібна глобальна edge-логіка з мінімальною затримкою — Workers (у них 300+ точок, що у 2.5 рази більше ніж Vercel). Якщо використовуєте Next.js і потребуєте повноцінного Node.js runtime — Vercel Functions. Комбінуйте обидва підходи для складних проєктів.

Терміни

Serverless API для стартапу (10–20 функцій): 2–5 тижнів. Міграція монолітного Laravel/Node API на Lambda: 4–10 тижнів залежно від обсягу. Edge Middleware + Workers для глобального продукту: 2–4 тижні. Ми гарантуємо якість на основі 7+ років досвіду та 20+ реалізованих проєктів. Замовте консультацію — отримайте технічну оцінку вашого сценарію.