Um banco de dados vetorial leve projetado para pequenos projetos.
Características
Desempenho
Mais de 10x mais rápido que as operações vetoriais baseadas em Numpy.
Atualmente, é compatível com G ++ ou Clang ++.
Pode ser necessário modificar o parâmetro compile_config na inicialização VectorDatabase para injetar seus comandos de compilação.
Para fazê -lo funcionar com outro compilador, pode ser necessário alterar o módulo tiny_vectordb.jit .
pip install tiny_vectordbÉ bom ir!
O pacote emitirá alguns arquivos compilados no diretório de origem, que podem não ser removidos automaticamente usando pip uninstall ; portanto, você precisa executar o seguinte comando manualmente se desejar desinstalar o pacote penteado.
python -c " import tiny_vectordb; tiny_vectordb.cleanup() "Depois disso, você pode desinstalar com segurança o pacote com:
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 mais uso, consulte example.py .
Nota de design:
Nenhuma matriz Numpy é usada no banco de dados, porque eu quero que seja o mais leve possível, e listas de números são EAiser para ser convertido em JSON para comunicação com solicitações HTTP.
Os dados são sempre armazenados em memória contígua para garantir o melhor desempenho de pesquisa.
Portanto, a adição e a exclusão são preferidas em lotes à medida que eles abordam a realocação da memória.
Aqui estão algumas funções úteis para operações em lote:
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 ]]: