Verificando acesso...

MODULO 5.3

💾 Backends: do markdown ao Pinecone

Markdown, Obsidian, SQLite, sqlite-vec, ChromaDB, Supabase, Pinecone. Quando vale cada um — com custo, setup e trade-offs claros.

6
Topicos
35
Minutos
Tecnico
Nivel
Infra
Tipo
1

📄 Markdown: a base universal

Comece aqui. 80% dos usuarios nao precisam de mais.

Por que markdown ganha

Vantagens reais:

  • Zero dependencia — so precisa de editor e grep.
  • Humano legivel — voce le direto no terminal.
  • Git nativo — versionamento e backup automatico.
  • Portavel — funciona em qualquer OS, qualquer editor.
  • Custo zero — nem API, nem DB, nem config.

💡 Nao subestime

Muito engenheiro quer ir direto pra vetor. Markdown resolve 80% dos casos com 0% da complexidade.

2

🌐 Obsidian: duas portas

Mesmo markdown, dois acessos: humano no app, IA via CLI.

📐 Arquitetura two-doors

         ┌───────────────┐
         │   vault files │  (markdown .md)
         │   no disco    │
         └───────┬───────┘
                 │
        ┌────────┴────────┐
        │                 │
        ▼                 ▼
┌──────────────┐  ┌──────────────┐
│  Obsidian    │  │  Claude Code │
│  UI, mobile, │  │  via bash    │
│  backlinks,  │  │  (grep, cat, │
│  grafo       │  │   Obsidian   │
│              │  │   CLI)       │
└──────────────┘  └──────────────┘

Voce edita no Obsidian. Claude le os .md.

📊 Quando vale Obsidian

  • Ja tem vault pessoal: sinergia enorme
  • Trabalha mobile: Obsidian Sync ($4/mes)
  • Gosta de grafo visual: ver conexoes
  • Publica conhecimento: Obsidian Publish
  • Nao vale se: voce nao gosta do app e so usaria por Claude
3

🗃️ SQLite + FTS5

Quando grep fica lento, SQLite e o passo natural. DB embedded, zero config.

📐 Schema minimo

CREATE TABLE memories (
  id INTEGER PRIMARY KEY,
  title TEXT NOT NULL,
  body TEXT NOT NULL,
  type TEXT NOT NULL,        -- fact/decision/pattern/...
  created_at TEXT NOT NULL,
  access_count INTEGER DEFAULT 0
);

-- FTS5 virtual table para busca full-text
CREATE VIRTUAL TABLE memories_fts USING fts5(
  title, body, content=memories
);

-- Trigger para manter FTS em sync
CREATE TRIGGER memories_ai AFTER INSERT ON memories BEGIN
  INSERT INTO memories_fts(rowid, title, body)
  VALUES (new.id, new.title, new.body);
END;

-- Busca: <50ms em 10k entries
SELECT id, title FROM memories_fts
WHERE memories_fts MATCH 'webhook OR idempotency'
ORDER BY rank LIMIT 5;

📊 Quando migrar do markdown

  • Grep > 500ms: hora de SQLite
  • Memorias > 500: FTS5 vale a pena
  • Precisa de filtro por tipo: SQL vence grep combinado
  • Acces_count tracking: salience scoring precisa
4

🧠 sqlite-vec + fastembed

Semantica local. Sem API externa, sem custo recorrente, sem latencia de rede.

📐 Setup local

# Instalar dependencias (Python)
pip install sqlite-vec fastembed

# Criar index vetorial
import sqlite3
import sqlite_vec
from fastembed import TextEmbedding

db = sqlite3.connect('memory.db')
db.enable_load_extension(True)
sqlite_vec.load(db)

db.execute('''
  CREATE VIRTUAL TABLE vec_memories USING vec0(
    embedding float[384]
  )
''')

# Adicionar memoria
model = TextEmbedding()  # modelo leve, offline
emb = list(model.embed(['texto da memoria']))[0]
db.execute('INSERT INTO vec_memories VALUES (?, ?)',
           (id, emb.tolist()))

# Buscar 3 mais proximos
query_emb = list(model.embed(['pergunta']))[0]
results = db.execute('''
  SELECT rowid, distance FROM vec_memories
  WHERE embedding MATCH ?
  ORDER BY distance LIMIT 3
''', (query_emb.tolist(),)).fetchall()

📊 Privacidade + performance

  • Tudo local: privacidade total
  • Offline: funciona sem rede
  • Custo: zero recorrente
  • Latencia: ~30ms embed + 10ms search
5

☁️ Supabase, Turso, Pinecone

Cloud vale em casos especificos. Na duvida, nao e o seu.

✓ Cloud vale a pena

  • Time de 3+ pessoas compartilhando memoria
  • Voce troca entre desktop e mobile frequentemente
  • Ja paga Supabase/Postgres para outra coisa
  • Precisa auth e permissoes granulares

✗ Cloud e overkill

  • Voce e solo com 1 maquina
  • Privacidade e critica (medicina, direito)
  • Budget zero
  • Ainda em fase de experimentar
6

📊 Matriz de decisao

Tabela unica. Cole na sua documentacao.

📐 Matriz completa

| Backend       | Setup | Custo | Privacidade | Multi-dev | Semantica |
|---------------|-------|-------|-------------|-----------|-----------|
| Markdown      | 0min  | $0    | total       | git       | nao       |
| Obsidian      | 10min | $0-4  | total       | Sync      | parcial   |
| SQLite        | 30min | $0    | total       | nao       | nao       |
| sqlite-vec    | 1h    | $0    | total       | nao       | sim       |
| Supabase      | 2h    | $0-25 | cloud       | sim       | pgvector  |
| Turso         | 1h    | $0-20 | cloud       | sim       | nao       |
| Pinecone      | 2h    | $50+  | cloud       | sim       | sim       |

Regra: comece na linha 1-2. Sobe so quando medir limitacao real.

💡 Migration path

Markdown → SQLite (script: scan .md, insert). SQLite → sqlite-vec (add virtual table). Sempre reversivel.

📝 Resumo do Modulo

Markdown cobre 80% — nao subestime a base.
Obsidian e markdown + UI — duas portas para mesmo conteudo.
SQLite e o upgrade natural — quando busca fica lenta.
Cloud so em casos especificos — time ou multi-device real.

Proximo:

5.4 — Multi-sinal: o painel de juizes