Recern Vector DB · Protótipo

Um banco de dados vetorial em um único arquivo.

O Recern Vector é um banco de dados vetorial embarcado, no espírito do SQLite. Ele roda dentro da sua aplicação, guarda tudo em um único arquivo e mostra como cada busca foi executada. Estamos criando o Recern Vector junto com o workspace da Recern.

pip install recern-vectorNotas da versão v0.0.1
Rust · Python · CLI · MIT OR Apache-2.0
1,30×

o throughput do faiss HNSW com recall 0,95 no SIFT1M

1,78×

a mesma comparação no GloVe-100

35s

para indexar um milhão de vetores em 14 núcleos

0,11ms

latência mediana por consulta com recall 0,983 no SIFT1M

Por que o Recern Vector

Pequeno o bastante para embarcar. Aberto o bastante para entender.

01

Um arquivo

Um banco de dados é um único arquivo que você pode copiar, fazer backup ou distribuir com sua aplicação. O salvamento é atômico e cada arquivo é verificado com CRC32 ao ser aberto.

02

Sem servidor

O Recern Vector é uma biblioteca que roda no seu processo, com bindings para Rust e Python e uma ferramenta de linha de comando. Não há nada para implantar, configurar ou manter rodando.

03

Nada escondido

Cada busca pode informar sua estratégia, os nós visitados, a seletividade do filtro e quanto tempo levou. As estatísticas mostram as camadas do grafo, o uso de memória e os registros que nenhuma busca alcança, e o recall é medido com seus próprios dados.

Na prática

Busque e depois pergunte como a busca foi feita

O mesmo banco pelo Python e pela linha de comando. A saída à direita é uma execução real com 20.000 registros e um filtro por metadados.

import recern_vector as rv

db = rv.Database.open_or_create("docs.rvec")
docs = db.create_collection("docs", dim=384, metric="cosine")
docs.upsert_many(ids, embeddings, metadatas)

hits = docs.search(query, k=5, filter={"lang": "en"})
docs.explain(query, k=5)  # strategy, visited nodes, time
$ recern-vector query docs.rvec docs --like doc-42 -k 3 \
    --filter '{"lang": "en", "year": {"$gte": 2020}}' \
    --explain

  #  id          distance  metadata
  1  doc-42      -0.00000  {"lang":"en","year":2024}
  2  doc-18861    0.63155  {"lang":"en","year":2022}
  3  doc-10899    0.63834  {"lang":"en","year":2024}

  strategy      hnsw
  ef            64
  selectivity   ~19.9% of records match the filter
  visited       7,244 nodes
  distances     7,330 computed
  time          529 µs

Os bindings de Python aceitam arrays float32 do NumPy sem converter cada elemento. Inserções em lote constroem o índice em todos os núcleos.

No protótipo hoje

O que já funciona

  • HNSW e busca exata

    Um índice em grafo com m, ef_construction e ef_search por coleção, e uma varredura exata quando você precisa da referência.

  • Cosseno, L2 e produto escalar

    Cada coleção tem dimensão e métrica fixas. Vetores de cosseno são normalizados ao serem gravados.

  • Filtros por metadados

    Igualdade, $in e intervalos no estilo do MongoDB. Quando um filtro corresponde a muito poucos registros, a consulta passa para uma varredura exata.

  • Inserções paralelas e atômicas

    Inserções em lote constroem o índice em todos os núcleos. Se um vetor for inválido, nada é gravado.

  • Upsert, exclusão e compactação

    Substitua ou exclua registros por id e compacte para reconstruir a coleção sem os registros excluídos.

  • API de introspecção

    stats(), explain() e estimate_recall() fazem parte da API, não de uma ferramenta separada.

  • Bindings de Python

    Um wheel PyO3 para CPython 3.11 ou mais recente, com anotações de tipo.

  • Ferramenta de linha de comando

    init, create-collection, insert, query, inspect, recall e compact.

Benchmarks

Mais rápido que o faiss HNSW com o mesmo recall

Uma consulta por vez pelo Python em Apple M3 Max, com a latência mediana abaixo de cada valor. O relatório completo também cobre construção do índice, tamanho em disco, método e limitações.

Consultas por segundo com recall@10 ≥ 0,95

EngineSIFT1MGloVe-100
Recern VectorHNSW9.0410,11 ms6351,60 ms
faissHNSWFlat6.9610,15 ms3562,83 ms
LanceDBIVF_HNSW_SQ7311,34 msnão atingido
LanceDBIVF_PQ, tuned2454,03 ms1675,93 ms
sqlite-vecexact scan1283,79 ms7140,43 ms
Ler o relatório completo (em inglês)
Status

Para onde o Recern Vector vai

  1. Agora

    Protótipo

    • Fase 1 concluída: formato de arquivo, HNSW, filtros, introspecção
    • Bindings de Python e CLI
    • Benchmarks públicos no SIFT1M e no GloVe-100
    • Open source (MIT ou Apache-2.0), no PyPI e no crates.io
  2. Depois

    Primeira versão, v0.1

    • Formato de arquivo estável e versionado
    • Documentação e exemplos
    • Abrir arquivos do Recern Vector no workspace da Recern
  3. Fora da v0

    Fora do escopo

    • Modo servidor
    • Sharding e replicação
    • Aceleração por GPU
    • Um serviço em nuvem

Por enquanto, todo o banco fica em memória, cada salvamento reescreve o arquivo e o formato ainda pode mudar. Instale com pip install recern-vector ou cargo add recern-vector; as versões ficam em 0.0.x até o formato ser estável.

Workspace da Recern

Parte de algo maior

A Recern é um workspace desktop para entender bancos de dados. Ele também vai explicar a busca vetorial nos bancos que você já usa, como pgvector e Redis. O Recern Vector é um projeto complementar separado e não faz parte do Alpha privado do workspace.

Entrar no Alpha privado do workspace