O que é Turso
Turso é um serviço de banco de dados edge baseado em libSQL (fork do SQLite). Combina a leveza do SQLite com replicação em locais edge, alcançando acesso a dados com latência ultrabaixa.
O que é libSQL
libSQL é um projeto open source que fez fork do SQLite. Mantém compatibilidade com SQLite enquanto adiciona funcionalidades como replicação, WebSocket e suporte HTTP.
Características
✓ Compatível com SQLite
✓ Replicação edge
✓ Embedded Replicas (SQLite dentro do app)
✓ Baixa latência (proximidade edge)
✓ Otimizado para serverless
✓ Plano gratuito generoso
Configuração
Turso CLI
# Instalação
curl -sSfL https://get.tur.so/install.sh | bash
# Login
turso auth login
# Criar banco de dados
turso db create my-app
# Conectar via 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
});
// Executar query
const result = await client.execute('SELECT * FROM users');
// Query com parâmetros
const user = await client.execute({
sql: 'SELECT * FROM users WHERE id = ?',
args: [1]
});
// Transação
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
Mantém uma réplica SQLite dentro da aplicação para leituras ultrarrápidas.
import { createClient } from '@libsql/client';
const client = createClient({
url: 'file:local.db', // Réplica local
syncUrl: 'libsql://my-app-username.turso.io', // Primário remoto
authToken: process.env.TURSO_AUTH_TOKEN,
syncInterval: 60 // Sincroniza a cada 60 segundos
});
// Leitura da réplica local (ultrarrápida)
const users = await client.execute('SELECT * FROM users');
// Executar sincronização explicitamente
await client.sync();
Benefícios das Embedded Replicas
Latência de leitura:
- DB Remoto: 50-100ms
- Embedded Replica: 1-5ms
Casos de uso:
- Cloudflare Workers
- Vercel Edge Functions
- Apps mobile
- Apps desktop
Integração com 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);
Localizações Edge
Localizações edge do Turso:
- América do Norte: 10+
- Europa: 10+
- Ásia: 5+
- Oceania: 2+
→ Responde da localização mais próxima do usuário
Configuração de Grupo
# Criar grupo de localização
turso group create my-group --location nrt # Tóquio
# Adicionar banco de dados ao grupo
turso db create my-db --group my-group
# Adicionar réplicas
turso group locations add my-group sin # Singapura
turso group locations add my-group lax # Los Angeles
Funcionalidade de Branches
# Criar branch
turso db create my-db --from-db production-db
# Desenvolver/testar no branch
turso db shell my-db
# Inserir dados de teste...
# Merge para produção (manual)
Uso com 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);
}
};
Preços
Plano Gratuito:
- 9GB armazenamento
- 500 milhões de leituras/mês
- 5 milhões de escritas/mês
- 500 bancos de dados
Plano Pro ($29/mês):
- 24GB armazenamento
- Leituras ilimitadas
- Bancos de dados ilimitados
Resumo
Turso é um serviço de banco de dados que combina a leveza do SQLite com as vantagens da computação edge. Leituras com latência ultrabaixa através de Embedded Replicas são ideais especialmente para aplicações em ambientes edge.
← Voltar para a lista