Recern Vector DB · Prototipo

Una base de datos vectorial en un solo archivo.

Recern Vector es una base de datos vectorial embebida, al estilo de SQLite. Se ejecuta dentro de tu aplicación, guarda todo en un solo archivo y te muestra cómo se ejecutó cada búsqueda. La estamos creando junto al espacio de trabajo de Recern.

pip install recern-vectorNotas de la versión v0.0.1
Rust · Python · CLI · MIT OR Apache-2.0
1,30×

el rendimiento de faiss HNSW con recall 0,95 en SIFT1M

1,78×

la misma comparación en GloVe-100

35s

para indexar un millón de vectores en 14 núcleos

0,11ms

latencia mediana por consulta con recall 0,983 en SIFT1M

Por qué Recern Vector

Lo bastante pequeña para embeberla. Lo bastante abierta para entenderla.

01

Un archivo

Una base de datos es un solo archivo que puedes copiar, respaldar o distribuir con tu aplicación. El guardado es atómico y cada archivo se verifica con CRC32 al abrirlo.

02

Sin servidor

Recern Vector es una biblioteca que se ejecuta en tu proceso, con bindings para Rust y Python y una herramienta de línea de comandos. No hay nada que desplegar, configurar ni mantener en marcha.

03

Nada oculto

Cada búsqueda puede informar su estrategia, los nodos visitados, la selectividad del filtro y cuánto tardó. Las estadísticas muestran las capas del grafo, el uso de memoria y los registros que ninguna búsqueda puede alcanzar, y el recall se mide con tus propios datos.

Cómo se ve

Busca y luego pregunta cómo se hizo la búsqueda

La misma base de datos desde Python y desde la línea de comandos. La salida de la derecha es una ejecución real con 20.000 registros y un filtro por metadatos.

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

Los bindings de Python aceptan arrays float32 de NumPy sin convertir cada elemento. Las inserciones por lotes construyen el índice en todos los núcleos.

Hoy en el prototipo

Lo que ya funciona

  • HNSW y búsqueda exacta

    Un índice de grafo con m, ef_construction y ef_search por colección, y un recorrido exacto cuando necesitas la verdad de referencia.

  • Coseno, L2 y producto escalar

    Cada colección tiene una dimensión y una métrica fijas. Los vectores de coseno se normalizan al guardarse.

  • Filtros por metadatos

    Igualdad, $in y rangos al estilo de MongoDB. Cuando un filtro coincide con muy pocos registros, la consulta pasa a un recorrido exacto.

  • Inserciones paralelas y atómicas

    Las inserciones por lotes construyen el índice en todos los núcleos. Si un vector no es válido, no se escribe nada.

  • Upsert, borrado y compactación

    Reemplaza o borra registros por id y compacta para reconstruir la colección sin los registros borrados.

  • API de introspección

    stats(), explain() y estimate_recall() son parte de la API, no una herramienta aparte.

  • Bindings de Python

    Un wheel de PyO3 para CPython 3.11 o posterior, con anotaciones de tipo.

  • Herramienta de línea de comandos

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

Benchmarks

Más rápida que faiss HNSW con el mismo recall

Una consulta a la vez desde Python en Apple M3 Max, con la latencia mediana debajo de cada cifra. El informe completo también cubre la construcción del índice, el tamaño en disco, el método y las limitaciones.

Consultas por segundo con recall@10 ≥ 0,95

MotorSIFT1MGloVe-100
Recern VectorHNSW90410,11 ms6351,60 ms
faissHNSWFlat69610,15 ms3562,83 ms
LanceDBIVF_HNSW_SQ7311,34 msno alcanzado
LanceDBIVF_PQ, tuned2454,03 ms1675,93 ms
sqlite-vecexact scan1283,79 ms7140,43 ms
Leer el informe completo (en inglés)
Estado

Hacia dónde va Recern Vector

  1. Ahora

    Prototipo

    • Fase 1 completada: formato de archivo, HNSW, filtros, introspección
    • Bindings de Python y CLI
    • Benchmarks públicos en SIFT1M y GloVe-100
    • Código abierto (MIT o Apache-2.0), en PyPI y crates.io
  2. Después

    Primera versión, v0.1

    • Formato de archivo estable y versionado
    • Documentación y ejemplos
    • Abrir archivos de Recern Vector en el espacio de trabajo de Recern
  3. Fuera de la v0

    Fuera de alcance

    • Modo servidor
    • Sharding y replicación
    • Aceleración por GPU
    • Un servicio en la nube

Por ahora, toda la base de datos se mantiene en memoria, cada guardado reescribe el archivo y el formato aún puede cambiar. Se instala con pip install recern-vector o cargo add recern-vector; las versiones seguirán en 0.0.x hasta que el formato sea estable.

Espacio de trabajo de Recern

Parte de algo más grande

Recern es un espacio de trabajo de escritorio para entender bases de datos. También explicará la búsqueda vectorial en las bases que ya usas, como pgvector y Redis. Recern Vector es un proyecto complementario independiente y no forma parte de la Alpha privada del espacio de trabajo.

Unirse a la Alpha privada del espacio de trabajo