Turso & libSQL - SQLite para Edge

2024.12.30

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