𝗧𝘂𝗿𝘀𝗼 𝗹𝗶𝗯𝗦𝗤𝗟 𝗽𝗿𝗼𝘁𝘆 𝗖𝗹𝗼𝘂𝗱𝗳𝗹𝗮𝗿𝗲 𝗗𝟭

Вибір бази даних для Astro monorepo залежить від вашого робочого процесу.

Нещодавно я створив спільну базу даних для трьох Astro SSG сайтів. У мене було два варіанти: Turso (libSQL) або Cloudflare D1.

Я обрав Turso.

Ось чому практична різниця мала значення.

Cloudflare D1 створений для Cloudflare Workers. Якщо ви використовуєте Workers для server-side rendering, D1 буде кращим вибором. Він працює там само, де виконується ваш код.

Моя конфігурація інша. Мої сайти — це статичні Astro 5 SSG на Cloudflare Pages. Я не використовую Workers. Мій ETL-конвеєр працює в GitHub Actions.

Використовувати D1 з GitHub Actions складно. Вам доведеться використовувати Cloudflare API або Wrangler CLI. Жоден із них не надає локального файлу SQLite для виконання запитів під час розробки. У результаті ви звертаєтеся до віддаленої бази даних під час кожного тесту.

Turso вирішує це за допомогою пакета @libsql/client. Він приймає URL. Цей URL може бути як віддаленим посиланням, так і шляхом до локального файлу.

Мій код виглядає так:

У CI це віддалене посилання Turso. На моєму ноутбуці клієнт відкриває локальний файл. Пакет, запити та схема залишаються незмінними.

Шлях виконання коду ідентичний.

Це дозволяє мені:

  • Запускати ETL-скрипти локально.
  • Переглядати базу даних за допомогою будь-якого SQLite viewer.
  • Запускати міграції за допомогою тієї ж функції, що використовується у продакшені.

Мені не потрібен Docker. Мені не потрібні спеціальні прапорці. Один і той самий SQL працює всюди.

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

Коли варто обрати D1? Якщо ви використовуєте Cloudflare Workers для пошуку або API-маршрутів, D1 буде кращим. З'єднання швидше, оскільки воно залишається в межах одного дата-центру.

Моя архітектура повністю статична. Оскільки я не використовую Workers, D1 втрачає свою головну перевагу.

Поточні компроміси:

  • Продуктивність запису: Мій ETL виконує завдання по черзі. Я не тестував високошвидкісний паралельний запис.
  • Зміни схеми: Додавання колонок — це легко. Перейменування колонок потребує більшої обережності.
  • Ціноутворення: Обидва мають щедрі безкоштовні рівні. Для трьох сайтів мої витрати становлять нуль.

Вибір бази даних не був головною метою. Можливість використання локального файлу стала причиною мого вибору Turso. Це спрощує розробку.

Джерело: https://dev