Eine leichte Vektordatenbank für kleine Projekte.
Merkmale
Leistung
Mehr als 10x schneller als Numpy-basierte Vektoroperationen.
Es ist derzeit mit G ++ oder Clang ++ kompatibel.
Möglicherweise müssen Sie den Parameter compile_config in VectorDatabase -Initialisierung ändern, um Ihre Kompilierungsbefehle zu injizieren.
Damit es mit einem anderen Compiler funktioniert, müssen Sie möglicherweise das Modul tiny_vectordb.jit ändern.
pip install tiny_vectordbGut zu gehen!
Das Paket wird im Quellverzeichnis einige kompilierte Dateien ausgibt, die möglicherweise nicht automatisch mithilfe von pip uninstall entfernt werden. Daher müssen Sie den folgenden Befehl manuell ausführen, wenn Sie das Paket komplely deinstallieren möchten.
python -c " import tiny_vectordb; tiny_vectordb.cleanup() "Danach können Sie das Paket sicher mit:
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 ) Weitere Verwendung finden Sie unter example.py .
BESTELLUNGSNAHMEN:
In der Datenbank wird kein Numpy -Array verwendet, da ich möchte, dass es so leicht wie möglich ist und Listen von Zahlen für die Kommunikation mit HTTP -Anfragen in JSON konvertiert werden.
Die Daten werden immer im zusammenhängenden Speicher gespeichert, um die beste Suchleistung zu gewährleisten.
Daher wird die Hinzufügung und Löschung bevorzugt, die in Chargen durchgeführt werden, wenn sie die Speicherumverteilung der Speicher umgeben.
Hier sind einige nützliche Funktionen für Stapeloperationen:
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 ]]: