vectordb-bench 0.0.25__tar.gz → 0.0.26__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/PKG-INFO +1 -1
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/api.py +13 -0
- vectordb_bench-0.0.26/vectordb_bench/backend/clients/clickhouse/clickhouse.py +232 -0
- vectordb_bench-0.0.26/vectordb_bench/backend/clients/clickhouse/config.py +89 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/milvus/config.py +134 -1
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/milvus/milvus.py +3 -1
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/config/dbCaseConfigs.py +109 -9
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/models.py +6 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench.egg-info/PKG-INFO +1 -1
- vectordb_bench-0.0.25/vectordb_bench/backend/clients/clickhouse/clickhouse.py +0 -156
- vectordb_bench-0.0.25/vectordb_bench/backend/clients/clickhouse/config.py +0 -60
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/.devcontainer/Dockerfile +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/.devcontainer/devcontainer.json +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/.env.example +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/.github/workflows/publish_package_on_release.yml +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/.github/workflows/pull_request.yml +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/.gitignore +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/Dockerfile +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/LICENSE +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/Makefile +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/OWNERS +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/README.md +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/fig/custom_case_run_test.png +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/fig/custom_dataset.png +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/install/requirements_py3.11.txt +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/install.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/pyproject.toml +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/setup.cfg +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/tests/conftest.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/tests/pytest.ini +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/tests/test_bench_runner.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/tests/test_chroma.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/tests/test_data_source.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/tests/test_dataset.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/tests/test_elasticsearch_cloud.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/tests/test_models.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/tests/test_rate_runner.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/tests/test_redis.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/tests/test_utils.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/tests/ut_cases.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/__init__.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/__main__.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/__init__.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/assembler.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/cases.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/__init__.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/aliyun_elasticsearch/aliyun_elasticsearch.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/aliyun_elasticsearch/config.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/aliyun_opensearch/aliyun_opensearch.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/aliyun_opensearch/config.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/alloydb/alloydb.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/alloydb/cli.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/alloydb/config.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/aws_opensearch/aws_opensearch.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/aws_opensearch/cli.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/aws_opensearch/config.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/aws_opensearch/run.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/chroma/chroma.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/chroma/config.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/clickhouse/cli.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/elastic_cloud/config.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/elastic_cloud/elastic_cloud.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/mariadb/cli.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/mariadb/config.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/mariadb/mariadb.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/memorydb/cli.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/memorydb/config.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/memorydb/memorydb.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/milvus/cli.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/mongodb/config.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/mongodb/mongodb.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/pgdiskann/cli.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/pgdiskann/config.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/pgdiskann/pgdiskann.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/pgvecto_rs/cli.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/pgvecto_rs/config.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/pgvecto_rs/pgvecto_rs.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/pgvector/cli.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/pgvector/config.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/pgvector/pgvector.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/pgvectorscale/cli.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/pgvectorscale/config.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/pgvectorscale/pgvectorscale.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/pinecone/config.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/pinecone/pinecone.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/qdrant_cloud/config.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/qdrant_cloud/qdrant_cloud.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/redis/cli.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/redis/config.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/redis/redis.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/test/cli.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/test/config.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/test/test.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/tidb/cli.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/tidb/config.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/tidb/tidb.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/vespa/cli.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/vespa/config.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/vespa/util.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/vespa/vespa.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/weaviate_cloud/cli.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/weaviate_cloud/config.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/weaviate_cloud/weaviate_cloud.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/zilliz_cloud/cli.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/zilliz_cloud/config.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/zilliz_cloud/zilliz_cloud.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/data_source.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/dataset.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/result_collector.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/runner/__init__.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/runner/mp_runner.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/runner/rate_runner.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/runner/read_write_runner.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/runner/serial_runner.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/runner/util.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/task_runner.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/utils.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/base.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/cli/__init__.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/cli/cli.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/cli/vectordbbench.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/config-files/sample_config.yml +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/custom/custom_case.json +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/check_results/charts.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/check_results/data.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/check_results/expanderStyle.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/check_results/filters.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/check_results/footer.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/check_results/headerIcon.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/check_results/nav.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/check_results/priceTable.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/check_results/stPageConfig.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/concurrent/charts.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/custom/displayCustomCase.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/custom/displaypPrams.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/custom/getCustomConfig.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/custom/initStyle.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/get_results/saveAsImage.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/run_test/autoRefresh.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/run_test/caseSelector.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/run_test/dbConfigSetting.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/run_test/dbSelector.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/run_test/generateTasks.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/run_test/hideSidebar.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/run_test/initStyle.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/run_test/submitTask.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/tables/data.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/config/dbPrices.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/config/styles.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/pages/concurrent.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/pages/custom.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/pages/quries_per_dollar.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/pages/run_test.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/pages/tables.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/utils.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/vdb_benchmark.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/interface.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/log_util.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/metric.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/ElasticCloud/result_20230727_standard_elasticcloud.json +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/ElasticCloud/result_20230808_standard_elasticcloud.json +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/Milvus/result_20230727_standard_milvus.json +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/Milvus/result_20230808_standard_milvus.json +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/PgVector/result_20230727_standard_pgvector.json +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/PgVector/result_20230808_standard_pgvector.json +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/Pinecone/result_20230727_standard_pinecone.json +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/Pinecone/result_20230808_standard_pinecone.json +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/QdrantCloud/result_20230727_standard_qdrantcloud.json +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/QdrantCloud/result_20230808_standard_qdrantcloud.json +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/WeaviateCloud/result_20230727_standard_weaviatecloud.json +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/WeaviateCloud/result_20230808_standard_weaviatecloud.json +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/ZillizCloud/result_20230727_standard_zillizcloud.json +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/ZillizCloud/result_20230808_standard_zillizcloud.json +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/ZillizCloud/result_20240105_standard_202401_zillizcloud.json +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/dbPrices.json +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/getLeaderboardData.py +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/leaderboard.json +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench.egg-info/SOURCES.txt +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench.egg-info/dependency_links.txt +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench.egg-info/entry_points.txt +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench.egg-info/requires.txt +0 -0
- {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: vectordb-bench
|
3
|
-
Version: 0.0.
|
3
|
+
Version: 0.0.26
|
4
4
|
Summary: VectorDBBench is not just an offering of benchmark results for mainstream vector databases and cloud services, it's your go-to tool for the ultimate performance and cost-effectiveness comparison. Designed with ease-of-use in mind, VectorDBBench is devised to help users, even non-professionals, reproduce results or test new systems, making the hunt for the optimal choice amongst a plethora of cloud services and open-source vector databases a breeze.
|
5
5
|
Author-email: XuanYang-cn <xuan.yang@zilliz.com>
|
6
6
|
Project-URL: repository, https://github.com/zilliztech/VectorDBBench
|
@@ -16,10 +16,15 @@ class MetricType(str, Enum):
|
|
16
16
|
|
17
17
|
class IndexType(str, Enum):
|
18
18
|
HNSW = "HNSW"
|
19
|
+
HNSW_SQ = "HNSW_SQ"
|
20
|
+
HNSW_PQ = "HNSW_PQ"
|
21
|
+
HNSW_PRQ = "HNSW_PRQ"
|
19
22
|
DISKANN = "DISKANN"
|
20
23
|
STREAMING_DISKANN = "DISKANN"
|
21
24
|
IVFFlat = "IVF_FLAT"
|
25
|
+
IVFPQ = "IVF_PQ"
|
22
26
|
IVFSQ8 = "IVF_SQ8"
|
27
|
+
IVF_RABITQ = "IVF_RABITQ"
|
23
28
|
Flat = "FLAT"
|
24
29
|
AUTOINDEX = "AUTOINDEX"
|
25
30
|
ES_HNSW = "hnsw"
|
@@ -31,6 +36,14 @@ class IndexType(str, Enum):
|
|
31
36
|
SCANN = "scann"
|
32
37
|
|
33
38
|
|
39
|
+
class SQType(str, Enum):
|
40
|
+
SQ6 = "SQ6"
|
41
|
+
SQ8 = "SQ8"
|
42
|
+
BF16 = "BF16"
|
43
|
+
FP16 = "FP16"
|
44
|
+
FP32 = "FP32"
|
45
|
+
|
46
|
+
|
34
47
|
class DBConfig(ABC, BaseModel):
|
35
48
|
"""DBConfig contains the connection info of vector database
|
36
49
|
|
@@ -0,0 +1,232 @@
|
|
1
|
+
"""Wrapper around the Clickhouse vector database over VectorDB"""
|
2
|
+
|
3
|
+
import logging
|
4
|
+
from contextlib import contextmanager
|
5
|
+
from typing import Any
|
6
|
+
|
7
|
+
import clickhouse_connect
|
8
|
+
from clickhouse_connect.driver import Client
|
9
|
+
|
10
|
+
from .. import IndexType
|
11
|
+
from ..api import VectorDB
|
12
|
+
from .config import ClickhouseConfigDict, ClickhouseIndexConfig
|
13
|
+
|
14
|
+
log = logging.getLogger(__name__)
|
15
|
+
|
16
|
+
|
17
|
+
class Clickhouse(VectorDB):
|
18
|
+
"""Use SQLAlchemy instructions"""
|
19
|
+
|
20
|
+
def __init__(
|
21
|
+
self,
|
22
|
+
dim: int,
|
23
|
+
db_config: ClickhouseConfigDict,
|
24
|
+
db_case_config: ClickhouseIndexConfig,
|
25
|
+
collection_name: str = "CHVectorCollection",
|
26
|
+
drop_old: bool = False,
|
27
|
+
**kwargs,
|
28
|
+
):
|
29
|
+
self.db_config = db_config
|
30
|
+
self.case_config = db_case_config
|
31
|
+
self.table_name = collection_name
|
32
|
+
self.dim = dim
|
33
|
+
|
34
|
+
self.index_param = self.case_config.index_param()
|
35
|
+
self.search_param = self.case_config.search_param()
|
36
|
+
self.session_param = self.case_config.session_param()
|
37
|
+
|
38
|
+
self._index_name = "clickhouse_index"
|
39
|
+
self._primary_field = "id"
|
40
|
+
self._vector_field = "embedding"
|
41
|
+
|
42
|
+
# construct basic units
|
43
|
+
self.conn = self._create_connection(**self.db_config, settings=self.session_param)
|
44
|
+
|
45
|
+
if drop_old:
|
46
|
+
log.info(f"Clickhouse client drop table : {self.table_name}")
|
47
|
+
self._drop_table()
|
48
|
+
self._create_table(dim)
|
49
|
+
if self.case_config.create_index_before_load:
|
50
|
+
self._create_index()
|
51
|
+
|
52
|
+
self.conn.close()
|
53
|
+
self.conn = None
|
54
|
+
|
55
|
+
@contextmanager
|
56
|
+
def init(self) -> None:
|
57
|
+
"""
|
58
|
+
Examples:
|
59
|
+
>>> with self.init():
|
60
|
+
>>> self.insert_embeddings()
|
61
|
+
>>> self.search_embedding()
|
62
|
+
"""
|
63
|
+
|
64
|
+
self.conn = self._create_connection(**self.db_config, settings=self.session_param)
|
65
|
+
|
66
|
+
try:
|
67
|
+
yield
|
68
|
+
finally:
|
69
|
+
self.conn.close()
|
70
|
+
self.conn = None
|
71
|
+
|
72
|
+
def _create_connection(self, settings: dict | None, **kwargs) -> Client:
|
73
|
+
return clickhouse_connect.get_client(**self.db_config, settings=settings)
|
74
|
+
|
75
|
+
def _drop_index(self):
|
76
|
+
assert self.conn is not None, "Connection is not initialized"
|
77
|
+
try:
|
78
|
+
self.conn.command(
|
79
|
+
f'ALTER TABLE {self.db_config["database"]}.{self.table_name} DROP INDEX {self._index_name}'
|
80
|
+
)
|
81
|
+
except Exception as e:
|
82
|
+
log.warning(f"Failed to drop index on table {self.db_config['database']}.{self.table_name}: {e}")
|
83
|
+
raise e from None
|
84
|
+
|
85
|
+
def _drop_table(self):
|
86
|
+
assert self.conn is not None, "Connection is not initialized"
|
87
|
+
|
88
|
+
try:
|
89
|
+
self.conn.command(f'DROP TABLE IF EXISTS {self.db_config["database"]}.{self.table_name}')
|
90
|
+
except Exception as e:
|
91
|
+
log.warning(f"Failed to drop table {self.db_config['database']}.{self.table_name}: {e}")
|
92
|
+
raise e from None
|
93
|
+
|
94
|
+
def _perfomance_tuning(self):
|
95
|
+
self.conn.command("SET materialize_skip_indexes_on_insert = 1")
|
96
|
+
|
97
|
+
def _create_index(self):
|
98
|
+
assert self.conn is not None, "Connection is not initialized"
|
99
|
+
try:
|
100
|
+
if self.index_param["index_type"] == IndexType.HNSW.value:
|
101
|
+
if (
|
102
|
+
self.index_param["quantization"]
|
103
|
+
and self.index_param["params"]["M"]
|
104
|
+
and self.index_param["params"]["efConstruction"]
|
105
|
+
):
|
106
|
+
query = f"""
|
107
|
+
ALTER TABLE {self.db_config["database"]}.{self.table_name}
|
108
|
+
ADD INDEX {self._index_name} {self._vector_field}
|
109
|
+
TYPE vector_similarity('hnsw', '{self.index_param["metric_type"]}',
|
110
|
+
'{self.index_param["quantization"]}',
|
111
|
+
{self.index_param["params"]["M"]}, {self.index_param["params"]["efConstruction"]})
|
112
|
+
GRANULARITY {self.index_param["granularity"]}
|
113
|
+
"""
|
114
|
+
else:
|
115
|
+
query = f"""
|
116
|
+
ALTER TABLE {self.db_config["database"]}.{self.table_name}
|
117
|
+
ADD INDEX {self._index_name} {self._vector_field}
|
118
|
+
TYPE vector_similarity('hnsw', '{self.index_param["metric_type"]}')
|
119
|
+
GRANULARITY {self.index_param["granularity"]}
|
120
|
+
"""
|
121
|
+
self.conn.command(cmd=query)
|
122
|
+
else:
|
123
|
+
log.warning("HNSW is only avaliable method in clickhouse now")
|
124
|
+
except Exception as e:
|
125
|
+
log.warning(f"Failed to create Clickhouse vector index on table: {self.table_name} error: {e}")
|
126
|
+
raise e from None
|
127
|
+
|
128
|
+
def _create_table(self, dim: int):
|
129
|
+
assert self.conn is not None, "Connection is not initialized"
|
130
|
+
|
131
|
+
try:
|
132
|
+
# create table
|
133
|
+
self.conn.command(
|
134
|
+
f'CREATE TABLE IF NOT EXISTS {self.db_config["database"]}.{self.table_name} '
|
135
|
+
f"({self._primary_field} UInt32, "
|
136
|
+
f'{self._vector_field} Array({self.index_param["vector_data_type"]}) CODEC(NONE), '
|
137
|
+
f"CONSTRAINT same_length CHECK length(embedding) = {dim}) "
|
138
|
+
f"ENGINE = MergeTree() "
|
139
|
+
f"ORDER BY {self._primary_field}"
|
140
|
+
)
|
141
|
+
|
142
|
+
except Exception as e:
|
143
|
+
log.warning(f"Failed to create Clickhouse table: {self.table_name} error: {e}")
|
144
|
+
raise e from None
|
145
|
+
|
146
|
+
def optimize(self, data_size: int | None = None):
|
147
|
+
pass
|
148
|
+
|
149
|
+
def _post_insert(self):
|
150
|
+
pass
|
151
|
+
|
152
|
+
def insert_embeddings(
|
153
|
+
self,
|
154
|
+
embeddings: list[list[float]],
|
155
|
+
metadata: list[int],
|
156
|
+
**kwargs: Any,
|
157
|
+
) -> (int, Exception):
|
158
|
+
assert self.conn is not None, "Connection is not initialized"
|
159
|
+
|
160
|
+
try:
|
161
|
+
# do not iterate for bulk insert
|
162
|
+
items = [metadata, embeddings]
|
163
|
+
|
164
|
+
self.conn.insert(
|
165
|
+
table=self.table_name,
|
166
|
+
data=items,
|
167
|
+
column_names=["id", "embedding"],
|
168
|
+
column_type_names=["UInt32", f'Array({self.index_param["vector_data_type"]})'],
|
169
|
+
column_oriented=True,
|
170
|
+
)
|
171
|
+
return len(metadata), None
|
172
|
+
except Exception as e:
|
173
|
+
log.warning(f"Failed to insert data into Clickhouse table ({self.table_name}), error: {e}")
|
174
|
+
return 0, e
|
175
|
+
|
176
|
+
def search_embedding(
|
177
|
+
self,
|
178
|
+
query: list[float],
|
179
|
+
k: int = 100,
|
180
|
+
filters: dict | None = None,
|
181
|
+
timeout: int | None = None,
|
182
|
+
) -> list[int]:
|
183
|
+
assert self.conn is not None, "Connection is not initialized"
|
184
|
+
parameters = {
|
185
|
+
"primary_field": self._primary_field,
|
186
|
+
"vector_field": self._vector_field,
|
187
|
+
"schema": self.db_config["database"],
|
188
|
+
"table": self.table_name,
|
189
|
+
"gt": filters.get("id"),
|
190
|
+
"k": k,
|
191
|
+
"metric_type": self.search_param["metric_type"],
|
192
|
+
"query": query,
|
193
|
+
}
|
194
|
+
if self.case_config.metric_type == "COSINE":
|
195
|
+
if filters:
|
196
|
+
result = self.conn.query(
|
197
|
+
"SELECT {primary_field:Identifier}, {vector_field:Identifier} "
|
198
|
+
"FROM {schema:Identifier}.{table:Identifier} "
|
199
|
+
"WHERE {primary_field:Identifier} > {gt:UInt32} "
|
200
|
+
"ORDER BY cosineDistance(embedding,{query:Array(Float64)}) "
|
201
|
+
"LIMIT {k:UInt32}",
|
202
|
+
parameters=parameters,
|
203
|
+
).result_rows
|
204
|
+
return [int(row[0]) for row in result]
|
205
|
+
|
206
|
+
result = self.conn.query(
|
207
|
+
"SELECT {primary_field:Identifier}, {vector_field:Identifier} "
|
208
|
+
"FROM {schema:Identifier}.{table:Identifier} "
|
209
|
+
"ORDER BY cosineDistance(embedding,{query:Array(Float64)}) "
|
210
|
+
"LIMIT {k:UInt32}",
|
211
|
+
parameters=parameters,
|
212
|
+
).result_rows
|
213
|
+
return [int(row[0]) for row in result]
|
214
|
+
if filters:
|
215
|
+
result = self.conn.query(
|
216
|
+
"SELECT {primary_field:Identifier}, {vector_field:Identifier} "
|
217
|
+
"FROM {schema:Identifier}.{table:Identifier} "
|
218
|
+
"WHERE {primary_field:Identifier} > {gt:UInt32} "
|
219
|
+
"ORDER BY L2Distance(embedding,{query:Array(Float64)}) "
|
220
|
+
"LIMIT {k:UInt32}",
|
221
|
+
parameters=parameters,
|
222
|
+
).result_rows
|
223
|
+
return [int(row[0]) for row in result]
|
224
|
+
|
225
|
+
result = self.conn.query(
|
226
|
+
"SELECT {primary_field:Identifier}, {vector_field:Identifier} "
|
227
|
+
"FROM {schema:Identifier}.{table:Identifier} "
|
228
|
+
"ORDER BY L2Distance(embedding,{query:Array(Float64)}) "
|
229
|
+
"LIMIT {k:UInt32}",
|
230
|
+
parameters=parameters,
|
231
|
+
).result_rows
|
232
|
+
return [int(row[0]) for row in result]
|
@@ -0,0 +1,89 @@
|
|
1
|
+
from abc import abstractmethod
|
2
|
+
from typing import TypedDict
|
3
|
+
|
4
|
+
from pydantic import BaseModel, SecretStr
|
5
|
+
|
6
|
+
from ..api import DBCaseConfig, DBConfig, IndexType, MetricType
|
7
|
+
|
8
|
+
|
9
|
+
class ClickhouseConfigDict(TypedDict):
|
10
|
+
user: str
|
11
|
+
password: str
|
12
|
+
host: str
|
13
|
+
port: int
|
14
|
+
database: str
|
15
|
+
secure: bool
|
16
|
+
|
17
|
+
|
18
|
+
class ClickhouseConfig(DBConfig):
|
19
|
+
user_name: str = "clickhouse"
|
20
|
+
password: SecretStr
|
21
|
+
host: str = "localhost"
|
22
|
+
port: int = 8123
|
23
|
+
db_name: str = "default"
|
24
|
+
secure: bool = False
|
25
|
+
|
26
|
+
def to_dict(self) -> ClickhouseConfigDict:
|
27
|
+
pwd_str = self.password.get_secret_value()
|
28
|
+
return {
|
29
|
+
"host": self.host,
|
30
|
+
"port": self.port,
|
31
|
+
"database": self.db_name,
|
32
|
+
"user": self.user_name,
|
33
|
+
"password": pwd_str,
|
34
|
+
"secure": self.secure,
|
35
|
+
}
|
36
|
+
|
37
|
+
|
38
|
+
class ClickhouseIndexConfig(BaseModel, DBCaseConfig):
|
39
|
+
|
40
|
+
metric_type: MetricType | None = None
|
41
|
+
vector_data_type: str | None = "Float32" # Data type of vectors. Can be Float32 or Float64 or BFloat16
|
42
|
+
create_index_before_load: bool = True
|
43
|
+
create_index_after_load: bool = False
|
44
|
+
|
45
|
+
def parse_metric(self) -> str:
|
46
|
+
if not self.metric_type:
|
47
|
+
return ""
|
48
|
+
return self.metric_type.value
|
49
|
+
|
50
|
+
def parse_metric_str(self) -> str:
|
51
|
+
if self.metric_type == MetricType.L2:
|
52
|
+
return "L2Distance"
|
53
|
+
if self.metric_type == MetricType.COSINE:
|
54
|
+
return "cosineDistance"
|
55
|
+
return "cosineDistance"
|
56
|
+
|
57
|
+
@abstractmethod
|
58
|
+
def session_param(self):
|
59
|
+
pass
|
60
|
+
|
61
|
+
|
62
|
+
class ClickhouseHNSWConfig(ClickhouseIndexConfig):
|
63
|
+
M: int | None # Default in clickhouse in 32
|
64
|
+
efConstruction: int | None # Default in clickhouse in 128
|
65
|
+
ef: int | None = None
|
66
|
+
index: IndexType = IndexType.HNSW
|
67
|
+
quantization: str | None = "bf16" # Default is bf16. Possible values are f64, f32, f16, bf16, or i8
|
68
|
+
granularity: int | None = 10_000_000 # Size of the index granules. By default, in CH it's equal 10.000.000
|
69
|
+
|
70
|
+
def index_param(self) -> dict:
|
71
|
+
return {
|
72
|
+
"vector_data_type": self.vector_data_type,
|
73
|
+
"metric_type": self.parse_metric_str(),
|
74
|
+
"index_type": self.index.value,
|
75
|
+
"quantization": self.quantization,
|
76
|
+
"granularity": self.granularity,
|
77
|
+
"params": {"M": self.M, "efConstruction": self.efConstruction},
|
78
|
+
}
|
79
|
+
|
80
|
+
def search_param(self) -> dict:
|
81
|
+
return {
|
82
|
+
"metric_type": self.parse_metric_str(),
|
83
|
+
"params": {"ef": self.ef},
|
84
|
+
}
|
85
|
+
|
86
|
+
def session_param(self) -> dict:
|
87
|
+
return {
|
88
|
+
"allow_experimental_vector_similarity_index": 1,
|
89
|
+
}
|
{vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/milvus/config.py
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
from pydantic import BaseModel, SecretStr, validator
|
2
2
|
|
3
|
-
from ..api import DBCaseConfig, DBConfig, IndexType, MetricType
|
3
|
+
from ..api import DBCaseConfig, DBConfig, IndexType, MetricType, SQType
|
4
4
|
|
5
5
|
|
6
6
|
class MilvusConfig(DBConfig):
|
@@ -88,6 +88,88 @@ class HNSWConfig(MilvusIndexConfig, DBCaseConfig):
|
|
88
88
|
}
|
89
89
|
|
90
90
|
|
91
|
+
class HNSWSQConfig(HNSWConfig, DBCaseConfig):
|
92
|
+
index: IndexType = IndexType.HNSW_SQ
|
93
|
+
sq_type: SQType = SQType.SQ8
|
94
|
+
refine: bool = True
|
95
|
+
refine_type: SQType = SQType.FP32
|
96
|
+
refine_k: float = 1
|
97
|
+
|
98
|
+
def index_param(self) -> dict:
|
99
|
+
return {
|
100
|
+
"metric_type": self.parse_metric(),
|
101
|
+
"index_type": self.index.value,
|
102
|
+
"params": {
|
103
|
+
"M": self.M,
|
104
|
+
"efConstruction": self.efConstruction,
|
105
|
+
"sq_type": self.sq_type.value,
|
106
|
+
"refine": self.refine,
|
107
|
+
"refine_type": self.refine_type.value,
|
108
|
+
},
|
109
|
+
}
|
110
|
+
|
111
|
+
def search_param(self) -> dict:
|
112
|
+
return {
|
113
|
+
"metric_type": self.parse_metric(),
|
114
|
+
"params": {"ef": self.ef, "refine_k": self.refine_k},
|
115
|
+
}
|
116
|
+
|
117
|
+
|
118
|
+
class HNSWPQConfig(HNSWConfig):
|
119
|
+
index: IndexType = IndexType.HNSW_PQ
|
120
|
+
m: int = 32
|
121
|
+
nbits: int = 8
|
122
|
+
refine: bool = True
|
123
|
+
refine_type: SQType = SQType.FP32
|
124
|
+
refine_k: float = 1
|
125
|
+
|
126
|
+
def index_param(self) -> dict:
|
127
|
+
return {
|
128
|
+
"metric_type": self.parse_metric(),
|
129
|
+
"index_type": self.index.value,
|
130
|
+
"params": {
|
131
|
+
"M": self.M,
|
132
|
+
"efConstruction": self.efConstruction,
|
133
|
+
"m": self.m,
|
134
|
+
"nbits": self.nbits,
|
135
|
+
"refine": self.refine,
|
136
|
+
"refine_type": self.refine_type.value,
|
137
|
+
},
|
138
|
+
}
|
139
|
+
|
140
|
+
def search_param(self) -> dict:
|
141
|
+
return {
|
142
|
+
"metric_type": self.parse_metric(),
|
143
|
+
"params": {"ef": self.ef, "refine_k": self.refine_k},
|
144
|
+
}
|
145
|
+
|
146
|
+
|
147
|
+
class HNSWPRQConfig(HNSWPQConfig):
|
148
|
+
index: IndexType = IndexType.HNSW_PRQ
|
149
|
+
nrq: int = 2
|
150
|
+
|
151
|
+
def index_param(self) -> dict:
|
152
|
+
return {
|
153
|
+
"metric_type": self.parse_metric(),
|
154
|
+
"index_type": self.index.value,
|
155
|
+
"params": {
|
156
|
+
"M": self.M,
|
157
|
+
"efConstruction": self.efConstruction,
|
158
|
+
"m": self.m,
|
159
|
+
"nbits": self.nbits,
|
160
|
+
"nrq": self.nrq,
|
161
|
+
"refine": self.refine,
|
162
|
+
"refine_type": self.refine_type.value,
|
163
|
+
},
|
164
|
+
}
|
165
|
+
|
166
|
+
def search_param(self) -> dict:
|
167
|
+
return {
|
168
|
+
"metric_type": self.parse_metric(),
|
169
|
+
"params": {"ef": self.ef, "refine_k": self.refine_k},
|
170
|
+
}
|
171
|
+
|
172
|
+
|
91
173
|
class DISKANNConfig(MilvusIndexConfig, DBCaseConfig):
|
92
174
|
search_list: int | None = None
|
93
175
|
index: IndexType = IndexType.DISKANN
|
@@ -125,6 +207,27 @@ class IVFFlatConfig(MilvusIndexConfig, DBCaseConfig):
|
|
125
207
|
}
|
126
208
|
|
127
209
|
|
210
|
+
class IVFPQConfig(MilvusIndexConfig, DBCaseConfig):
|
211
|
+
nlist: int
|
212
|
+
nprobe: int | None = None
|
213
|
+
m: int = 32
|
214
|
+
nbits: int = 8
|
215
|
+
index: IndexType = IndexType.IVFPQ
|
216
|
+
|
217
|
+
def index_param(self) -> dict:
|
218
|
+
return {
|
219
|
+
"metric_type": self.parse_metric(),
|
220
|
+
"index_type": self.index.value,
|
221
|
+
"params": {"nlist": self.nlist, "m": self.m, "nbits": self.nbits},
|
222
|
+
}
|
223
|
+
|
224
|
+
def search_param(self) -> dict:
|
225
|
+
return {
|
226
|
+
"metric_type": self.parse_metric(),
|
227
|
+
"params": {"nprobe": self.nprobe},
|
228
|
+
}
|
229
|
+
|
230
|
+
|
128
231
|
class IVFSQ8Config(MilvusIndexConfig, DBCaseConfig):
|
129
232
|
nlist: int
|
130
233
|
nprobe: int | None = None
|
@@ -144,6 +247,31 @@ class IVFSQ8Config(MilvusIndexConfig, DBCaseConfig):
|
|
144
247
|
}
|
145
248
|
|
146
249
|
|
250
|
+
class IVFRABITQConfig(IVFSQ8Config):
|
251
|
+
index: IndexType = IndexType.IVF_RABITQ
|
252
|
+
rbq_bits_query: int = 0 # 0, 1, 2, ..., 8
|
253
|
+
refine: bool = True
|
254
|
+
refine_type: SQType = SQType.FP32
|
255
|
+
refine_k: float = 1
|
256
|
+
|
257
|
+
def index_param(self) -> dict:
|
258
|
+
return {
|
259
|
+
"metric_type": self.parse_metric(),
|
260
|
+
"index_type": self.index.value,
|
261
|
+
"params": {
|
262
|
+
"nlist": self.nlist,
|
263
|
+
"refine": self.refine,
|
264
|
+
"refine_type": self.refine_type.value,
|
265
|
+
},
|
266
|
+
}
|
267
|
+
|
268
|
+
def search_param(self) -> dict:
|
269
|
+
return {
|
270
|
+
"metric_type": self.parse_metric(),
|
271
|
+
"params": {"nprobe": self.nprobe, "rbq_bits_query": self.rbq_bits_query, "refine_k": self.refine_k},
|
272
|
+
}
|
273
|
+
|
274
|
+
|
147
275
|
class FLATConfig(MilvusIndexConfig, DBCaseConfig):
|
148
276
|
index: IndexType = IndexType.Flat
|
149
277
|
|
@@ -285,9 +413,14 @@ class GPUCAGRAConfig(MilvusIndexConfig, DBCaseConfig):
|
|
285
413
|
_milvus_case_config = {
|
286
414
|
IndexType.AUTOINDEX: AutoIndexConfig,
|
287
415
|
IndexType.HNSW: HNSWConfig,
|
416
|
+
IndexType.HNSW_SQ: HNSWSQConfig,
|
417
|
+
IndexType.HNSW_PQ: HNSWPQConfig,
|
418
|
+
IndexType.HNSW_PRQ: HNSWPRQConfig,
|
288
419
|
IndexType.DISKANN: DISKANNConfig,
|
289
420
|
IndexType.IVFFlat: IVFFlatConfig,
|
421
|
+
IndexType.IVFPQ: IVFPQConfig,
|
290
422
|
IndexType.IVFSQ8: IVFSQ8Config,
|
423
|
+
IndexType.IVF_RABITQ: IVFRABITQConfig,
|
291
424
|
IndexType.Flat: FLATConfig,
|
292
425
|
IndexType.GPU_IVF_FLAT: GPUIVFFlatConfig,
|
293
426
|
IndexType.GPU_IVF_PQ: GPUIVFPQConfig,
|
{vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/milvus/milvus.py
RENAMED
@@ -61,6 +61,7 @@ class Milvus(VectorDB):
|
|
61
61
|
consistency_level="Session",
|
62
62
|
)
|
63
63
|
|
64
|
+
log.info(f"{self.name} create index: index_params: {self.case_config.index_param()}")
|
64
65
|
col.create_index(
|
65
66
|
self._vector_field,
|
66
67
|
self.case_config.index_param(),
|
@@ -71,7 +72,7 @@ class Milvus(VectorDB):
|
|
71
72
|
connections.disconnect("default")
|
72
73
|
|
73
74
|
@contextmanager
|
74
|
-
def init(self)
|
75
|
+
def init(self):
|
75
76
|
"""
|
76
77
|
Examples:
|
77
78
|
>>> with self.init():
|
@@ -126,6 +127,7 @@ class Milvus(VectorDB):
|
|
126
127
|
try:
|
127
128
|
self.col.compact()
|
128
129
|
self.col.wait_for_compaction_completed()
|
130
|
+
log.info("compactation completed. waiting for the rest of index buliding.")
|
129
131
|
except Exception as e:
|
130
132
|
log.warning(f"{self.name} compact error: {e}")
|
131
133
|
if hasattr(e, "code"):
|