Легкая векторная база данных, предназначенная для небольших проектов.
Функции
Производительность
Более чем в 10 раз быстрее, чем векторные операции на основе Numpy.
В настоящее время он совместим с G ++ или Clang ++.
Возможно, вам потребуется изменить параметр compile_config в инициализации VectorDatabase для внедрения ваших команд компиляции.
Чтобы он работал с другим компилятором, вам может потребоваться изменить модуль tiny_vectordb.jit .
pip install tiny_vectordbПриятно идти!
Пакет излучит некоторые скомпилированные файлы в исходном каталоге, которые могут не быть автоматически удалены с помощью pip uninstall , поэтому вам необходимо запустить следующую команду вручную, если вы хотите удалить пакет легко.
python -c " import tiny_vectordb; tiny_vectordb.cleanup() "После этого вы можете безопасно удалить пакет с:
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 ) Для получения дополнительного использования см. example.py .
Проектирование примечания:
В базе данных не используется массив Numpy, потому что я хочу, чтобы он был настолько легким, насколько это возможно, и списки чисел будут преобразованы в JSON для связи с HTTP -запросами.
Данные всегда хранятся в смежной памяти, чтобы обеспечить наилучшую производительность поиска.
Таким образом, добавление и удаление предпочтительнее, чтобы сделать партии, поскольку они расширяют перераспределение памяти.
Вот несколько полезных функций для пакетных операций:
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 ]]: