יישום האינטרנט הגלובלי שלך סובל מפיגור עבור משתמשים באזורים אחרים? מסד נתונים במרכז נתונים יחיד מוסיף חביון מיותר. אנו פותרים זאת עם Turso — SQLite מבוזר על ה-Edge. במאמר זה, אנו מסבירים כיצד להגדיר את Turso עם Drizzle ORM ו-replicas מוטמעים עבור חביון קריאה של 0 אלפיות שנייה ב-Cloudflare Workers. למהנדסים שלנו יש ניסיון של 10+ שנים במערכות מבוזרות והם סיפקו 15+ פרויקטים של Turso, תוך הפחתת חביון ממוצע פי 3. בהשוואה ל-SQLite רגיל, Turso מקצר את החביון הגלובלי ביותר מפי 10. התחל עם בדיקה חינמית של הפרויקט שלך — צור קשר.
בעיות שאנו פותרים
חביון גלובלי. משתמשים מדרום אמריקה או אסיה ממתינים 200–400 אלפיות שנייה לבקשה שתגיע לשרת באירופה. Turso מציב replicas ביותר מ-20 אזורים, ומבצע את הבקשה על הצומת הקרוב ביותר. תחרות כתיבה. בתרחישים עתירי כתיבה, SQLite נועל את כל מסד הנתונים במהלך כתיבות. Turso פותר זאת באמצעות שכפול: כתיבה רק ל-primary, קריאה מכל replica. ריבוי אזורים ללא כאב. אין צורך להקים אשכול PostgreSQL או לדאוג לסנכרון. Turso מנהל את השכפול אוטומטית, וה-replica המוטמע מספק קריאות ללא חביון בזמן ריצה. Turso תומך גם במודל database-per-tenant, המפשט את בידוד הנתונים עבור יישומים מרובי-דיירים.
כיצד Turso עובד
Turso משתמש במודל primary + replicas:
- Primary — מקבל את כל הכתיבות.
- Replicas — עותקים לקריאה בלבד ב-Edge (לדוגמה, פרנקפורט, סינגפור, סאו פאולו).
- Replica מוטמע — עותק SQLite מקומי בזיכרון של Cloudflare Worker או תהליך Node.js.
עבור יישומים עתירי קריאה, replica מוטמע מפחית את חביון הקריאה לאפס — הבקשה אף פעם לא עוזבת את זמן הריצה. בפרויקט אחד (בלוג ארגוני עם 100 אלף מבקרים ייחודיים חודשיים), השגנו זמני תגובה של SSR מתחת ל-50 אלפיות שנייה באחוזון ה-99.
הגדרת Turso יכולה לחסוך עד 70% בעלויות תשתית עבור יישומים עתירי קריאה בהשוואה לפתרונות מסורתיים.
| תכונה | Turso | SQLite מסורתי | PostgreSQL (שרת יחיד) |
|---|---|---|---|
| חביון קריאה (גלובלי) | <10 אלפיות שנייה | לא רלוונטי (מקומי) | 50–300 אלפיות שנייה (תלוי באזור) |
| תפוקת כתיבה | ~1k פעולות/שנייה (primary יחיד) | ~10k פעולות/שנייה (מקומי) | ~10k+ פעולות/שנייה (עם sharding) |
| ריבוי אזורים | מובנה | לא | דורש הגדרה |
| Replica מוטמע | כן | לא | לא |
| עלות (10 GB) | נמוכה | חינם | בינונית |
כיצד אנו מגדירים את Turso Turnkey
אנו משלימים את ההגדרה תוך יומיים. להלן השלבים העיקריים:
- בדיקת סכימה ועומס — קביעה אם התרחיש עתיר הקריאה מתאים.
- יצירת primary ו-replicas — בחירת אזורים דרך CLI.
- אינטגרציה עם Drizzle ORM — שאילתות טיפוסיות, מיגרציות.
- הגדרת replica מוטמע — עבור Cloudflare Workers או Node.js.
- מיגרציות CI/CD — יישום סכימה אוטומטי בעת פריסה.
דוגמת CLI וקוד
# CLI для создания базы и реплик
turso auth login
turso db create myapp --location ams
turso db replicate myapp --location sin
turso db replicate myapp --location gru
turso db show myapp --url
turso db tokens create myapp // libSQL клиент с embedded replica
import { createClient } from '@libsql/client';
const db = createClient({
url: process.env.TURSO_DATABASE_URL!,
authToken: process.env.TURSO_AUTH_TOKEN!,
syncUrl: process.env.TURSO_DATABASE_URL!,
syncInterval: 60,
});
await db.sync();
const posts = await db.execute('SELECT id, title FROM articles');
כיצד Drizzle ORM משתלב עם Turso
אנו מחברים את Drizzle עבור שאילתות טיפוסיות:
// db/schema.ts
import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core';
export const articles = sqliteTable('articles', {
id: integer('id').primaryKey({ autoIncrement: true }),
title: text('title').notNull(),
slug: text('slug').notNull().unique(),
body: text('body'),
publishedAt: integer('published_at', { mode: 'timestamp' }),
});
// db/client.ts
import { drizzle } from 'drizzle-orm/libsql';
import { createClient } from '@libsql/client';
const client = createClient({
url: process.env.TURSO_DATABASE_URL!,
authToken: process.env.TURSO_AUTH_TOKEN!,
});
export const db = drizzle(client);
const posts = await db.select().from(articles)
.where(isNotNull(articles.publishedAt))
.orderBy(desc(articles.publishedAt))
.limit(10);
למה לבחור ב-Replica מוטמע?
Replica מוטמע נותן אפס חביון בקריאות — השאילתה רצה ישירות בזמן הריצה, ללא קריאות רשת. זה קריטי עבור SSR ב-Cloudflare Workers: דף נטען תוך 10–20 אלפיות שנייה במקום 100+. אנו מבטיחים שה-replica המוטמע מסתנכרן עם ה-primary לפחות פעם בדקה. עבור רוב היישומים עתירי הקריאה, זה מקובל.
ציר זמן ואבני דרך
| שלב | משך | תוצאה |
|---|---|---|
| בדיקה ועיצוב | 4 שעות | תוכנית ארכיטקטורה, בחירת אזורים |
| הגדרת Turso ו-replicas | 2 שעות | מסד נתונים עובד עם replicas |
| אינטגרציית Drizzle | 4 שעות | גישה טיפוסית, שאילתות ראשונות |
| Replica מוטמע עבור Workers | 3 שעות | קריאות ללא חביון |
| מיגרציות CI/CD | 2 שעות | מיגרציות אוטומטיות בעת פריסה |
מה כלול
- בדיקת סכימה ועומס נוכחיים.
- יצירת primary ו-replicas באזורים הנדרשים.
- אינטגרציה עם Drizzle ORM (או ORM אחר לבחירתך).
- הגדרת replica מוטמע עבור Cloudflare Workers או Node.js.
- סקריפטים למיגרציות CI/CD.
- תיעוד ארכיטקטורה וגישה.
- הדרכת צוות (שעה אונליין).
- אחריות תמיכה לשבועיים לאחר המסירה.
מגבלות Turso: מתי לבחור בפתרון אחר
- עומס עתיר כתיבה (>20% כתיבות). כל הכתיבות עוברות ל-primary, מה שיוצר צוואר בקבוק.
- שאילתות אנליטיות מורכבות — SQLite אינו מחליף את ClickHouse או Timescale.
- דרישות PostgreSQL — RLS, טיפוסים מתקדמים, PostGIS.
- תחרות כתיבה גבוהה — נעילות ACID של SQLite.
הזמן הגדרת Turso Turnkey
נעריך את הפרויקט שלך: שלח לנו תיאור עומס וסכימה — נבחר את תצורת Turso האופטימלית. הגדרה Turnkey תוך יומיים. התקשר או כתוב — נדון בפרטים. קבל ייעוץ לפרויקט שלך היום.







