Qué es Turso
Turso es un servicio de base de datos edge basado en libSQL (un fork de SQLite). Combina la ligereza de SQLite con replicación en ubicaciones edge para lograr acceso a datos con latencia ultra baja.
Qué es libSQL
libSQL es un proyecto de código abierto que es un fork de SQLite. Mientras mantiene compatibilidad con SQLite, agrega funciones como replicación, WebSocket y soporte HTTP.
Características
✓ Compatible con SQLite
✓ Replicación edge
✓ Embedded Replicas (SQLite dentro de la app)
✓ Baja latencia (proximidad edge)
✓ Optimizado para serverless
✓ Generoso tier gratuito
Configuración
Turso CLI
# Instalación
curl -sSfL https://get.tur.so/install.sh | bash
# Login
turso auth login
# Crear base de datos
turso db create my-app
# Conectar con shell
turso db shell my-app
JavaScript/TypeScript
import { createClient } from '@libsql/client';
const client = createClient({
url: 'libsql://my-app-username.turso.io',
authToken: process.env.TURSO_AUTH_TOKEN
});
// Ejecutar query
const result = await client.execute('SELECT * FROM users');
// Query con parámetros
const user = await client.execute({
sql: 'SELECT * FROM users WHERE id = ?',
args: [1]
});
// Transacción
const tx = await client.transaction('write');
await tx.execute('INSERT INTO users (name) VALUES (?)', ['Alice']);
await tx.execute('INSERT INTO users (name) VALUES (?)', ['Bob']);
await tx.commit();
Embedded Replicas
Mantiene una réplica SQLite dentro de la aplicación para lecturas ultra rápidas.
import { createClient } from '@libsql/client';
const client = createClient({
url: 'file:local.db', // Réplica local
syncUrl: 'libsql://my-app-username.turso.io', // Primario remoto
authToken: process.env.TURSO_AUTH_TOKEN,
syncInterval: 60 // Sincronizar cada 60 segundos
});
// Leer desde réplica local (ultra rápido)
const users = await client.execute('SELECT * FROM users');
// Ejecutar sincronización explícitamente
await client.sync();
Beneficios de Embedded Replicas
Latencia de lectura:
- DB remota: 50-100ms
- Embedded Replica: 1-5ms
Casos de uso:
- Cloudflare Workers
- Vercel Edge Functions
- Aplicaciones móviles
- Aplicaciones de escritorio
Integración con Drizzle ORM
// schema.ts
import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core';
export const users = sqliteTable('users', {
id: integer('id').primaryKey({ autoIncrement: true }),
name: text('name').notNull(),
email: text('email').notNull().unique()
});
// db.ts
import { drizzle } from 'drizzle-orm/libsql';
import { createClient } from '@libsql/client';
import * as schema from './schema';
const client = createClient({
url: process.env.TURSO_DATABASE_URL!,
authToken: process.env.TURSO_AUTH_TOKEN
});
export const db = drizzle(client, { schema });
// Uso
const allUsers = await db.select().from(users);
Ubicaciones Edge
Ubicaciones edge de Turso:
- Norteamérica: 10+
- Europa: 10+
- Asia: 5+
- Oceanía: 2+
-> Respuesta desde la ubicación más cercana al usuario
Configuración de grupos
# Crear grupo de ubicaciones
turso group create my-group --location nrt # Tokio
# Agregar base de datos al grupo
turso db create my-db --group my-group
# Agregar réplicas
turso group locations add my-group sin # Singapur
turso group locations add my-group lax # Los Ángeles
Función de branches
# Crear branch
turso db create my-db --from-db production-db
# Desarrollar/probar en branch
turso db shell my-db
# Insertar datos de prueba...
# Merge a producción (manual)
Uso con Cloudflare Workers
// wrangler.toml
// [vars]
// TURSO_URL = "libsql://my-app-username.turso.io"
// src/index.ts
import { createClient } from '@libsql/client/web';
export default {
async fetch(request: Request, env: Env): Promise<Response> {
const client = createClient({
url: env.TURSO_URL,
authToken: env.TURSO_AUTH_TOKEN
});
const result = await client.execute('SELECT * FROM users LIMIT 10');
return Response.json(result.rows);
}
};
Precios
Plan gratuito:
- 9GB almacenamiento
- 500 millones de lecturas/mes
- 5 millones de escrituras/mes
- 500 bases de datos
Plan Pro ($29/mes):
- 24GB almacenamiento
- Lecturas ilimitadas
- Bases de datos ilimitadas
Resumen
Turso es un servicio de base de datos que combina la ligereza de SQLite con las ventajas del edge computing. Las Embedded Replicas proporcionan lecturas con latencia ultra baja, siendo especialmente óptimo para aplicaciones en entornos edge.
← Volver a la lista