Une base de données vectorielle légère conçue pour les petits projets.
Caractéristiques
Performance
Plus de 10x plus rapidement que les opérations vectorielles basées sur Numpy.
Il est actuellement compatible avec G ++ ou Clang ++.
Vous devrez peut-être modifier le paramètre compile_config dans l'initialisation VectorDatabase pour injecter vos commandes de compilation.
Pour le faire fonctionner avec un autre compilateur, vous devrez peut-être changer le module tiny_vectordb.jit .
pip install tiny_vectordbRavi d'y aller!
Le package émettra certains fichiers compilés dans le répertoire source, qui peut ne pas être supprimé automatiquement à l'aide pip uninstall , vous devez donc exécuter la commande suivante manuellement si vous souhaitez désinstaller le package de manière commun.
python -c " import tiny_vectordb; tiny_vectordb.cleanup() "Après cela, vous pouvez désinstaller en toute sécurité le package avec:
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 ) Pour plus d'utilisation, voir example.py .
Note de conception:
Aucun tableau Numpy n'est utilisé dans la base de données, car je veux qu'il soit aussi léger que possible, et les listes de nombres doivent être converties en JSON pour la communication avec les demandes HTTP.
Les données sont toujours stockées dans une mémoire contigu pour assurer les meilleures performances de recherche.
Ainsi, l'ajout et la suppression sont préférés en lots car ils envahissent la réallocation de la mémoire.
Voici quelques fonctions utiles pour les opérations par lots:
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 ]]: