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.
Files changed (182) hide show
  1. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/PKG-INFO +1 -1
  2. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/api.py +13 -0
  3. vectordb_bench-0.0.26/vectordb_bench/backend/clients/clickhouse/clickhouse.py +232 -0
  4. vectordb_bench-0.0.26/vectordb_bench/backend/clients/clickhouse/config.py +89 -0
  5. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/milvus/config.py +134 -1
  6. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/milvus/milvus.py +3 -1
  7. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/config/dbCaseConfigs.py +109 -9
  8. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/models.py +6 -0
  9. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench.egg-info/PKG-INFO +1 -1
  10. vectordb_bench-0.0.25/vectordb_bench/backend/clients/clickhouse/clickhouse.py +0 -156
  11. vectordb_bench-0.0.25/vectordb_bench/backend/clients/clickhouse/config.py +0 -60
  12. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/.devcontainer/Dockerfile +0 -0
  13. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/.devcontainer/devcontainer.json +0 -0
  14. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/.env.example +0 -0
  15. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/.github/workflows/publish_package_on_release.yml +0 -0
  16. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/.github/workflows/pull_request.yml +0 -0
  17. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/.gitignore +0 -0
  18. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/Dockerfile +0 -0
  19. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/LICENSE +0 -0
  20. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/Makefile +0 -0
  21. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/OWNERS +0 -0
  22. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/README.md +0 -0
  23. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/fig/custom_case_run_test.png +0 -0
  24. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/fig/custom_dataset.png +0 -0
  25. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/install/requirements_py3.11.txt +0 -0
  26. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/install.py +0 -0
  27. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/pyproject.toml +0 -0
  28. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/setup.cfg +0 -0
  29. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/tests/conftest.py +0 -0
  30. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/tests/pytest.ini +0 -0
  31. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/tests/test_bench_runner.py +0 -0
  32. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/tests/test_chroma.py +0 -0
  33. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/tests/test_data_source.py +0 -0
  34. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/tests/test_dataset.py +0 -0
  35. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/tests/test_elasticsearch_cloud.py +0 -0
  36. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/tests/test_models.py +0 -0
  37. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/tests/test_rate_runner.py +0 -0
  38. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/tests/test_redis.py +0 -0
  39. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/tests/test_utils.py +0 -0
  40. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/tests/ut_cases.py +0 -0
  41. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/__init__.py +0 -0
  42. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/__main__.py +0 -0
  43. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/__init__.py +0 -0
  44. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/assembler.py +0 -0
  45. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/cases.py +0 -0
  46. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/__init__.py +0 -0
  47. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/aliyun_elasticsearch/aliyun_elasticsearch.py +0 -0
  48. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/aliyun_elasticsearch/config.py +0 -0
  49. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/aliyun_opensearch/aliyun_opensearch.py +0 -0
  50. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/aliyun_opensearch/config.py +0 -0
  51. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/alloydb/alloydb.py +0 -0
  52. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/alloydb/cli.py +0 -0
  53. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/alloydb/config.py +0 -0
  54. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/aws_opensearch/aws_opensearch.py +0 -0
  55. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/aws_opensearch/cli.py +0 -0
  56. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/aws_opensearch/config.py +0 -0
  57. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/aws_opensearch/run.py +0 -0
  58. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/chroma/chroma.py +0 -0
  59. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/chroma/config.py +0 -0
  60. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/clickhouse/cli.py +0 -0
  61. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/elastic_cloud/config.py +0 -0
  62. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/elastic_cloud/elastic_cloud.py +0 -0
  63. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/mariadb/cli.py +0 -0
  64. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/mariadb/config.py +0 -0
  65. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/mariadb/mariadb.py +0 -0
  66. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/memorydb/cli.py +0 -0
  67. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/memorydb/config.py +0 -0
  68. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/memorydb/memorydb.py +0 -0
  69. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/milvus/cli.py +0 -0
  70. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/mongodb/config.py +0 -0
  71. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/mongodb/mongodb.py +0 -0
  72. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/pgdiskann/cli.py +0 -0
  73. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/pgdiskann/config.py +0 -0
  74. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/pgdiskann/pgdiskann.py +0 -0
  75. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/pgvecto_rs/cli.py +0 -0
  76. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/pgvecto_rs/config.py +0 -0
  77. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/pgvecto_rs/pgvecto_rs.py +0 -0
  78. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/pgvector/cli.py +0 -0
  79. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/pgvector/config.py +0 -0
  80. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/pgvector/pgvector.py +0 -0
  81. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/pgvectorscale/cli.py +0 -0
  82. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/pgvectorscale/config.py +0 -0
  83. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/pgvectorscale/pgvectorscale.py +0 -0
  84. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/pinecone/config.py +0 -0
  85. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/pinecone/pinecone.py +0 -0
  86. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/qdrant_cloud/config.py +0 -0
  87. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/qdrant_cloud/qdrant_cloud.py +0 -0
  88. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/redis/cli.py +0 -0
  89. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/redis/config.py +0 -0
  90. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/redis/redis.py +0 -0
  91. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/test/cli.py +0 -0
  92. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/test/config.py +0 -0
  93. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/test/test.py +0 -0
  94. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/tidb/cli.py +0 -0
  95. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/tidb/config.py +0 -0
  96. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/tidb/tidb.py +0 -0
  97. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/vespa/cli.py +0 -0
  98. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/vespa/config.py +0 -0
  99. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/vespa/util.py +0 -0
  100. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/vespa/vespa.py +0 -0
  101. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/weaviate_cloud/cli.py +0 -0
  102. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/weaviate_cloud/config.py +0 -0
  103. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/weaviate_cloud/weaviate_cloud.py +0 -0
  104. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/zilliz_cloud/cli.py +0 -0
  105. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/zilliz_cloud/config.py +0 -0
  106. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/clients/zilliz_cloud/zilliz_cloud.py +0 -0
  107. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/data_source.py +0 -0
  108. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/dataset.py +0 -0
  109. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/result_collector.py +0 -0
  110. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/runner/__init__.py +0 -0
  111. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/runner/mp_runner.py +0 -0
  112. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/runner/rate_runner.py +0 -0
  113. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/runner/read_write_runner.py +0 -0
  114. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/runner/serial_runner.py +0 -0
  115. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/runner/util.py +0 -0
  116. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/task_runner.py +0 -0
  117. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/backend/utils.py +0 -0
  118. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/base.py +0 -0
  119. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/cli/__init__.py +0 -0
  120. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/cli/cli.py +0 -0
  121. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/cli/vectordbbench.py +0 -0
  122. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/config-files/sample_config.yml +0 -0
  123. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/custom/custom_case.json +0 -0
  124. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/check_results/charts.py +0 -0
  125. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/check_results/data.py +0 -0
  126. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/check_results/expanderStyle.py +0 -0
  127. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/check_results/filters.py +0 -0
  128. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/check_results/footer.py +0 -0
  129. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/check_results/headerIcon.py +0 -0
  130. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/check_results/nav.py +0 -0
  131. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/check_results/priceTable.py +0 -0
  132. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/check_results/stPageConfig.py +0 -0
  133. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/concurrent/charts.py +0 -0
  134. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/custom/displayCustomCase.py +0 -0
  135. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/custom/displaypPrams.py +0 -0
  136. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/custom/getCustomConfig.py +0 -0
  137. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/custom/initStyle.py +0 -0
  138. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/get_results/saveAsImage.py +0 -0
  139. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/run_test/autoRefresh.py +0 -0
  140. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/run_test/caseSelector.py +0 -0
  141. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/run_test/dbConfigSetting.py +0 -0
  142. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/run_test/dbSelector.py +0 -0
  143. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/run_test/generateTasks.py +0 -0
  144. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/run_test/hideSidebar.py +0 -0
  145. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/run_test/initStyle.py +0 -0
  146. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/run_test/submitTask.py +0 -0
  147. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/components/tables/data.py +0 -0
  148. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/config/dbPrices.py +0 -0
  149. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/config/styles.py +0 -0
  150. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/pages/concurrent.py +0 -0
  151. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/pages/custom.py +0 -0
  152. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/pages/quries_per_dollar.py +0 -0
  153. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/pages/run_test.py +0 -0
  154. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/pages/tables.py +0 -0
  155. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/utils.py +0 -0
  156. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/frontend/vdb_benchmark.py +0 -0
  157. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/interface.py +0 -0
  158. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/log_util.py +0 -0
  159. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/metric.py +0 -0
  160. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/ElasticCloud/result_20230727_standard_elasticcloud.json +0 -0
  161. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/ElasticCloud/result_20230808_standard_elasticcloud.json +0 -0
  162. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/Milvus/result_20230727_standard_milvus.json +0 -0
  163. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/Milvus/result_20230808_standard_milvus.json +0 -0
  164. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/PgVector/result_20230727_standard_pgvector.json +0 -0
  165. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/PgVector/result_20230808_standard_pgvector.json +0 -0
  166. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/Pinecone/result_20230727_standard_pinecone.json +0 -0
  167. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/Pinecone/result_20230808_standard_pinecone.json +0 -0
  168. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/QdrantCloud/result_20230727_standard_qdrantcloud.json +0 -0
  169. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/QdrantCloud/result_20230808_standard_qdrantcloud.json +0 -0
  170. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/WeaviateCloud/result_20230727_standard_weaviatecloud.json +0 -0
  171. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/WeaviateCloud/result_20230808_standard_weaviatecloud.json +0 -0
  172. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/ZillizCloud/result_20230727_standard_zillizcloud.json +0 -0
  173. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/ZillizCloud/result_20230808_standard_zillizcloud.json +0 -0
  174. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/ZillizCloud/result_20240105_standard_202401_zillizcloud.json +0 -0
  175. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/dbPrices.json +0 -0
  176. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/getLeaderboardData.py +0 -0
  177. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench/results/leaderboard.json +0 -0
  178. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench.egg-info/SOURCES.txt +0 -0
  179. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench.egg-info/dependency_links.txt +0 -0
  180. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench.egg-info/entry_points.txt +0 -0
  181. {vectordb_bench-0.0.25 → vectordb_bench-0.0.26}/vectordb_bench.egg-info/requires.txt +0 -0
  182. {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.25
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
+ }
@@ -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,
@@ -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) -> None:
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"):