Una base de datos vectorial liviana diseñada para pequeños proyectos.
Características
Actuación
Más de 10 veces más rápido que las operaciones vectoriales basadas en Numpy.
Actualmente es compatible con G ++ o Clang ++.
Es posible que deba modificar el parámetro compile_config en la inicialización VectorDatabase para inyectar sus comandos de compilación.
Para que funcione con otro compilador, es posible que deba cambiar el módulo tiny_vectordb.jit .
pip install tiny_vectordb¡Qué bueno para ir!
El paquete emitirá algunos archivos compilados en el directorio de origen, que puede no eliminarse automáticamente utilizando pip uninstall , por lo que debe ejecutar el siguiente comando manualmente si desea desinstalar el paquete con la vez.
python -c " import tiny_vectordb; tiny_vectordb.cleanup() "Después de eso, puede desinstalar el paquete con:
pip uninstall tiny_vectordb from tiny_vectordb import VectorDatabase
collection_configs = [
{
"name" : "hello" ,
"dimension" : 256 ,
},
{
"name" : "world" ,
"dimension" : 1000 ,
}
]
database = VectorDatabase ( "test.db" , collection_configs )
collection = database [ "hello" ]
# add vectors
collection . setBlock (
[ "id1" , "id2" ], # ids
[[ 1 ] * 256 , [ 2 ] * 256 ] # vectors
)
# search for nearest vectors
search_ids , search_scores = collection . search ([ 1.9 ] * 256 ) Para más uso, vea example.py .
Nota de diseño:
No se usa una matriz Numpy en la base de datos, porque quiero que sea lo más liviano posible, y las listas de números son que se convierten en JSON para comunicarse con las solicitudes HTTP.
Los datos siempre se almacenan en memoria contigua para garantizar el mejor rendimiento de búsqueda.
Por lo tanto, se prefiere que la adición y la eliminación se realicen en lotes a medida que envían una reasignación de memoria.
Aquí hay algunas funciones útiles para operaciones por lotes:
class VectorCollection ( Generic [ NumVar ]):
def addBlock ( self , ids : list [ str ], vectors : list [ list [ NumVar ]]) -> None :
def setBlock ( self , ids : list [ str ], vectors : list [ list [ NumVar ]]) -> None :
def deleteBlock ( self , ids : list [ str ]) -> None :
def getBlock ( self , ids : list [ str ]) -> list [ list [ NumVar ]]: