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.
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 o throughput do faiss HNSW com recall 0,95 no SIFT1M
a mesma comparação no GloVe-100
para indexar um milhão de vetores em 14 núcleos
latência mediana por consulta com recall 0,983 no SIFT1M
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.
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.
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.
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 µsOs bindings de Python aceitam arrays float32 do NumPy sem converter cada elemento. Inserções em lote constroem o índice em todos os núcleos.
Um índice em grafo com m, ef_construction e ef_search por coleção, e uma varredura exata quando você precisa da referência.
Cada coleção tem dimensão e métrica fixas. Vetores de cosseno são normalizados ao serem gravados.
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 em lote constroem o índice em todos os núcleos. Se um vetor for inválido, nada é gravado.
Substitua ou exclua registros por id e compacte para reconstruir a coleção sem os registros excluídos.
stats(), explain() e estimate_recall() fazem parte da API, não de uma ferramenta separada.
Um wheel PyO3 para CPython 3.11 ou mais recente, com anotações de tipo.
init, create-collection, insert, query, inspect, recall e compact.
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.
| Engine | SIFT1M | GloVe-100 |
|---|---|---|
| Recern VectorHNSW | 9.0410,11 ms | 6351,60 ms |
| faissHNSWFlat | 6.9610,15 ms | 3562,83 ms |
| LanceDBIVF_HNSW_SQ | 7311,34 ms | não atingido |
| LanceDBIVF_PQ, tuned | 2454,03 ms | 1675,93 ms |
| sqlite-vecexact scan | 1283,79 ms | 7140,43 ms |
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.
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