hyperstreamdb 0.4.1__tar.gz → 0.5.1__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.
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/CHANGELOG.md +12 -1
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/Cargo.lock +1 -1
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/Cargo.toml +1 -1
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/PKG-INFO +1 -1
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/python/hyperstreamdb/__init__.py +38 -7
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/distance.rs +234 -2
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/hnsw_ivf.rs +52 -19
- hyperstreamdb-0.5.1/src/core/index/pq.rs +302 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/segment.rs +8 -85
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/table/builder.rs +2 -2
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/table/mod.rs +5 -4
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/table/write.rs +38 -58
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/wal.rs +18 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/python/helpers.rs +1 -1
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/python/table.rs +16 -8
- hyperstreamdb-0.4.1/scratch/check_os_error.rs +0 -29
- hyperstreamdb-0.4.1/src/core/index/pq.rs +0 -151
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/.env.example +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/.gitattributes +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/.gitignore +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/.hypothesis/constants/32b327793848e7d8 +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/.hypothesis/constants/67b0a8ccf18bf5d2 +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/.hypothesis/constants/84828557b4ee7be4 +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/.instructions.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/.ipynb_checkpoints/Untitled-checkpoint.ipynb +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/.qwen/settings.json +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/.qwen/settings.json.orig +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/CNAME +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/CONTRIBUTING.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/Dockerfile +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/HyperStreamDB.png +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/LICENSE-APACHE +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/LICENSE-MIT +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/README.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/RUN_COMPLIANCE_TESTS.sh +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/SECURITY.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/STEERING.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/THIRDPARTY_NOTICES.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/Untitled.ipynb +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benches/bench_table.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benches/performance.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/BENCHMARK_REPORT.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/benchmark_charts.png +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/benchmark_results.csv +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/concurrent_queries_20260409_214245.json +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/concurrent_queries_20260409_214245.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/filtered_search_comparison_20260409_222607.json +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/filtered_search_comparison_20260409_222607.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/filtered_vector_search_20260409_214355.json +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/filtered_vector_search_20260409_214355.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/filtered_vector_search_20260409_220418.json +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/filtered_vector_search_20260409_220418.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/filtered_vector_search_20260409_222053.json +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/filtered_vector_search_20260409_222053.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/filtered_vector_search_20260409_225907.json +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/filtered_vector_search_20260409_225907.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/full_scan_baseline_20260409_222303.json +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/full_scan_baseline_20260409_222303.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/high_selectivity_filter_20260409_222302.json +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/high_selectivity_filter_20260409_222302.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/ingestion_comparison_20260409_222516.json +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/ingestion_comparison_20260409_222516.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/multi_filter_vector_20260409_214428.json +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/multi_filter_vector_20260409_214428.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/multi_filter_vector_20260409_220450.json +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/multi_filter_vector_20260409_220450.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/multi_filter_vector_20260409_222131.json +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/multi_filter_vector_20260409_222131.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/multi_filter_vector_20260409_225938.json +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/multi_filter_vector_20260409_225938.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/multi_filter_vector_20260409_231713.json +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/multi_filter_vector_20260409_231713.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/post_vs_pre_filter_20260409_214501.json +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/post_vs_pre_filter_20260409_214501.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/post_vs_pre_filter_20260409_220524.json +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/post_vs_pre_filter_20260409_220524.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/post_vs_pre_filter_20260409_222204.json +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/post_vs_pre_filter_20260409_222204.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/post_vs_pre_filter_20260409_230010.json +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/post_vs_pre_filter_20260409_230010.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/query_comparison_20260409_222541.json +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/query_comparison_20260409_222541.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/range_query_20260409_222302.json +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/range_query_20260409_222302.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/search_filtered_high_selectivity_20260409_214144.json +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/search_filtered_high_selectivity_20260409_214144.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/search_unfiltered_20260409_214028.json +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/benchmark_results/search_unfiltered_20260409_214028.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/book.toml +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/build-connectors.sh +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/build.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/check_iceberg_compliance.py +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/clippy.toml +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/deny.toml +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/docker-compose-minio-nessie.yml +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/docker-compose.production.yml +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/docker-compose.yml +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/docs/.nojekyll +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/docs/BENCHMARKING.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/docs/COMPREHENSIVE_GUIDE.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/docs/CONCURRENCY.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/docs/CONFIGURATION.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/docs/DORIS_OPTIMIZATION_PATTERNS.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/docs/GPU_SETUP_GUIDE.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/docs/ICEBERG_V2_V3_API.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/docs/INSTALLATION.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/docs/PGVECTOR_SQL_GUIDE.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/docs/PYTHON_VECTOR_API.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/docs/VECTOR_CONFIGURATION.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/docs/api_reference.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/docs/architecture.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/docs/catalog_usage.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/docs/index.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/docs/integrations/README.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/docs/integrations/java_jni.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/docs/integrations/python.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/docs/integrations/spark.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/docs/integrations/trino.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/docs/monitoring.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/docs/requirements.txt +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/docs/source/_static/HyperStreamDB.png +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/docs/source/api/python.rst +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/docs/source/api/rust.rst +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/docs/source/conf.py +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/docs/source/index.rst +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/docs/source/roadmap.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/docs/task_status.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/proptest-regressions/core/index/gpu.txt +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/proptest-regressions/core/sql/vector_literal.txt +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/proptest-regressions/core/sql/vector_udf.txt +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/pyproject.toml +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/python/hyperstreamdb/embeddings.py +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/recovered_plan.txt +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/rust-toolchain.toml +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/scripts/fix_nb.py +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/scripts/split_table.py +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/scripts/update_cache.py +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/scripts/update_reader.py +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/scripts/update_schema_patch.py +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/scripts/update_schema_patch2.py +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/spark-hyperstream/.bloop/bloop.settings.json +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/spark-hyperstream/.bloop/spark-hyperstream-test.json +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/spark-hyperstream/.bloop/spark-hyperstream.json +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/spark-hyperstream/pom.xml +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/spark-hyperstream/src/main/java/com/hyperstreamdb/spark/DefaultSource.java +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/spark-hyperstream/src/main/java/com/hyperstreamdb/spark/HyperStreamPartition.java +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/spark-hyperstream/src/main/java/com/hyperstreamdb/spark/HyperStreamPartitionReader.java +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/spark-hyperstream/src/main/java/com/hyperstreamdb/spark/HyperStreamPartitionReaderFactory.java +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/spark-hyperstream/src/main/java/com/hyperstreamdb/spark/HyperStreamScanBuilder.java +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/spark-hyperstream/src/main/java/com/hyperstreamdb/spark/HyperStreamTable.java +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/spark-hyperstream/src/test/java/com/hyperstreamdb/spark/SparkConnectorTest.java +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/bin/gateway.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/bin/hdb.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/bin/iceberg_rest.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/bin/probe_datafusion.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/bin/setup_test_data.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/bin/verify_layered_indexing.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/cache.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/catalog/config.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/catalog/glue.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/catalog/hive.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/catalog/jdbc.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/catalog/mod.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/catalog/nessie.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/catalog/rest.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/catalog/unity.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/clustering.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/compaction.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/embeddings.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/error.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/ffi.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/iceberg/delete.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/iceberg/iceberg_delete.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/iceberg/manifest.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/iceberg/mod.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/iceberg/schema.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/iceberg/transform.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/iceberg/types.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/iceberg/value.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/iceberg/writer.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/build_inverted.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/build_vector.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/cuda/cosine_distance.cu +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/cuda/hamming_distance.cu +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/cuda/inner_product.cu +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/cuda/jaccard_distance.cu +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/cuda/kmeans_assignment.cu +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/cuda/l1_distance.cu +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/cuda/l2_distance.cu +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/gpu.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/hnsw_rs/annhdf5.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/hnsw_rs/api.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/hnsw_rs/dist.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/hnsw_rs/flatten.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/hnsw_rs/hnsw.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/hnsw_rs/hnswio.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/hnsw_rs/libext.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/hnsw_rs/mod.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/hnsw_rs/prelude.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/hnsw_rs/test.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/ivf.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/memory.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/mod.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/mps/cosine_distance.metal +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/mps/hamming_distance.metal +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/mps/inner_product.metal +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/mps/jaccard_distance.metal +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/mps/kmeans_assignment.metal +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/mps/l1_distance.metal +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/mps/l2_distance.metal +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/opencl/cosine_distance.cl +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/opencl/hamming_distance.cl +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/opencl/inner_product.cl +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/opencl/jaccard_distance.cl +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/opencl/kmeans_assignment.cl +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/opencl/l1_distance.cl +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/opencl/l2_distance.cl +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/tokenizer.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/turboquant.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/index/wgpu_kernel.wgsl +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/license.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/lock.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/maintenance.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/manifest/manager/commit.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/manifest/manager/load.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/manifest/manager/partition.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/manifest/manager/schema.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/manifest/manager.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/manifest/mod.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/manifest/types.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/merge.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/metadata.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/mod.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/nessie.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/planner/filter.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/planner/pruning.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/planner/vector_search.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/planner.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/puffin.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/query.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/reader/delete.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/reader/filter.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/reader/mod.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/reader/scan.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/search/mod.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/search/rrf.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/sql/literal/binary.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/sql/literal/dense.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/sql/literal/mod.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/sql/literal/sparse.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/sql/mod.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/sql/optimizer/config.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/sql/optimizer/index_join.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/sql/optimizer/vector_search/mod.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/sql/optimizer/vector_search/plan_detection.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/sql/optimizer/vector_search/plan_rewriter.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/sql/optimizer/vector_search/sort_expr_parser.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/sql/optimizer.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/sql/pgvector_rewriter.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/sql/physical_plan/index_join.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/sql/physical_plan/vector_merge.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/sql/physical_plan/vector_scan.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/sql/physical_plan.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/sql/session.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/sql/udf/aggregate.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/sql/udf/distance.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/sql/udf/mod.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/sql/udf/sparse.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/sql/udf/transform.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/sql/vector_literal.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/sql/vector_operators.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/sql/vector_udf/aggregate.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/sql/vector_udf/distance.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/sql/vector_udf/mod.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/sql/vector_udf/sparse.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/sql/vector_udf/transform.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/sql/vector_udf.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/storage.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/table/fluent.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/table/index_config.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/table/primary_key.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/table/read.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/table/schema.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/table/state.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/core/table/stats.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/enterprise/continuous_indexing.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/enterprise/mod.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/index.rs.old +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/lib.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/python/catalog/glue.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/python/catalog/hive.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/python/catalog/jdbc.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/python/catalog/mod.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/python/catalog/nessie.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/python/catalog/rest.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/python/catalog/unity.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/python/manifest.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/python/mod.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/python/schema.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/python/session.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/python/stats.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/python_binding.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/python_distance.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/python_gpu_context.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/telemetry/metrics.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/telemetry/mod.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/src/telemetry/tracing.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/all_types_index_test.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/bin/generate_iceberg_manifests.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/bin/verify_iceberg_read_check.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/check_mmh3.py +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/data/download_nyc_taxi.sh +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/data/generate_embeddings.py +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/data/generate_wikipedia.py +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/data/start_nessie.sh +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/datafusion_rust_test.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/debug_murmur3.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/fuzz_murmur3.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/gpu_test_helpers.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/integration_test_hnsw_ivf_native.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/performance/README.md +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/prototype_merge.py +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/python/verify_docstrings.py +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/python/verify_fluent_api.py +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/python/verify_unified_ingest.py +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/schema_evolution_test.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/stability.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/verify_all_algos.py +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/verify_catalog_commit.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/verify_compliance.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/verify_delete_correctness.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/verify_iceberg_python_delete.sh +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/verify_iceberg_rest.sh +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/verify_iceberg_rest_create.sh +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/verify_iceberg_rest_delete.sh +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/verify_iceberg_rest_remove_index.sh +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/verify_iceberg_rest_update.sh +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/verify_metadata_creation.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/verify_mor_reads.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/verify_mor_writes.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/verify_partition_transforms.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/verify_partitioned_writes.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/verify_puffin_index.sh +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/verify_rest_updates.sh +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/tests/verify_schema_compat.rs +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/trino-config/.DS_Store +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/trino-config/catalog/glue_catalog.properties +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/trino-config/catalog/hyperstreamdb.properties +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/trino-config/catalog/iceberg.properties +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/trino-config/catalog/memory.properties +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/trino-config/catalog/postgres.properties +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/trino-config/config.properties +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/trino-config/entrypoint.sh +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/trino-config/jvm.config +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/trino-config/node.properties +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/trino-config.zip +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/trino-hyperstream/pom.xml +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/trino-hyperstream/src/main/java/com/hyperstreamdb/trino/HyperStreamDBColumnHandle.java +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/trino-hyperstream/src/main/java/com/hyperstreamdb/trino/HyperStreamDBConnectorFactory.java +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/trino-hyperstream/src/main/java/com/hyperstreamdb/trino/HyperStreamDBMetadata.java +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/trino-hyperstream/src/main/java/com/hyperstreamdb/trino/HyperStreamDBPageSource.java +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/trino-hyperstream/src/main/java/com/hyperstreamdb/trino/HyperStreamDBPageSourceProvider.java +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/trino-hyperstream/src/main/java/com/hyperstreamdb/trino/HyperStreamDBPlugin.java +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/trino-hyperstream/src/main/java/com/hyperstreamdb/trino/HyperStreamDBSplit.java +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/trino-hyperstream/src/main/java/com/hyperstreamdb/trino/HyperStreamDBSplitManager.java +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/trino-hyperstream/src/main/java/com/hyperstreamdb/trino/HyperStreamDBTableHandle.java +0 -0
- {hyperstreamdb-0.4.1 → hyperstreamdb-0.5.1}/trino-hyperstream/src/test/java/com/hyperstreamdb/trino/TrinoConnectorTest.java +0 -0
|
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## [0.5.0] - 2026-06-03
|
|
13
|
+
|
|
10
14
|
### Added
|
|
11
15
|
- Comprehensive unit test suites for Spark and Trino connectors
|
|
12
16
|
- Thread-local GPU context for concurrent query safety
|
|
@@ -14,11 +18,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
14
18
|
- Query configuration API
|
|
15
19
|
- Metrics instrumentation for observability
|
|
16
20
|
- Release profiles (`release` and `release-lto`) in Cargo.toml
|
|
21
|
+
- `WriteAheadLog::append_fire_and_forget` — non-blocking WAL append that hands off batches to the WAL worker without blocking on `fdatasync`, eliminating ~800 ms write latency per call
|
|
17
22
|
|
|
18
23
|
### Changed
|
|
19
24
|
- CUDA is now an optional feature (no longer required for CI builds)
|
|
20
25
|
- FFI bounds hardened with panic safety guarantees
|
|
21
26
|
- Public APIs documented with rustdoc
|
|
27
|
+
- **`Table(index_all=False)` is now the default** (previously `True`). Automatic HNSW/BM25 index building on commit is now opt-in. This eliminates a silent 15–18 s background build that previously fired on every `commit()` for any table containing a vector column. To restore the old behaviour: `Table(uri, index_all=True)` or `table.index_all = True`.
|
|
28
|
+
- **`Table(autocommit=False)` is now the default** (previously `True`). Writes accumulate in an in-memory buffer and must be explicitly committed with `table.commit()`. This eliminates unexpected auto-flush overhead during ingestion loops.
|
|
29
|
+
- `write_async` no longer auto-detects columns named `"embedding"` as implicit HNSW index targets. Only columns explicitly registered via `add_index()` or `set_index_columns()` are indexed.
|
|
30
|
+
- `manifest_manager.load_latest_full` replaced with `load_latest` in the `flush_async` hot path, eliminating two unnecessary full manifest scans per commit.
|
|
31
|
+
- Primary key uniqueness check upgraded from O(N²) to O(N) using `HashSet`.
|
|
22
32
|
|
|
23
33
|
### Fixed
|
|
24
34
|
- Rustdoc warnings across the codebase
|
|
@@ -282,7 +292,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
282
292
|
|
|
283
293
|
---
|
|
284
294
|
|
|
285
|
-
[Unreleased]: https://github.com/rla3rd/hyperstreamdb/compare/v0.
|
|
295
|
+
[Unreleased]: https://github.com/rla3rd/hyperstreamdb/compare/v0.5.0...HEAD
|
|
296
|
+
[0.5.0]: https://github.com/rla3rd/hyperstreamdb/compare/v0.4.1...v0.5.0
|
|
286
297
|
[0.4.0]: https://github.com/rla3rd/hyperstreamdb/compare/v0.3.3...v0.4.0
|
|
287
298
|
[0.3.3]: https://github.com/rla3rd/hyperstreamdb/compare/v0.3.2...v0.3.3
|
|
288
299
|
[0.3.2]: https://github.com/rla3rd/hyperstreamdb/compare/v0.3.1...v0.3.2
|
|
@@ -181,9 +181,31 @@ class Query:
|
|
|
181
181
|
|
|
182
182
|
class Table:
|
|
183
183
|
"""
|
|
184
|
-
|
|
184
|
+
HyperStreamDB Table — Apache Iceberg/Parquet-compatible columnar vector store.
|
|
185
|
+
|
|
186
|
+
**Default behaviour (v0.4.1+)**
|
|
187
|
+
|
|
188
|
+
- ``index_all = False`` — Vector indexes are *not* built automatically.
|
|
189
|
+
Call ``table.index_all = True`` or ``table.add_index(column, 'hnsw')``
|
|
190
|
+
to enable indexing for a specific session or column.
|
|
191
|
+
- ``autocommit = False`` — Writes accumulate in an in-memory buffer.
|
|
192
|
+
Call ``table.commit()`` (or ``await table.commit_async()``) to persist
|
|
193
|
+
data to Parquet and advance the Iceberg snapshot.
|
|
194
|
+
|
|
195
|
+
These defaults exist for performance: automatic indexing previously caused
|
|
196
|
+
silent 15-18 s HNSW build latency on every ``commit()`` for tables with
|
|
197
|
+
vector columns, even when the user had not requested an index.
|
|
198
|
+
|
|
199
|
+
Args:
|
|
200
|
+
uri: Table location (``file:///path`` or cloud URI).
|
|
201
|
+
inner_table: Internal — do not pass directly.
|
|
202
|
+
device: Optional compute device for GPU-accelerated index builds.
|
|
203
|
+
index_all: Enable automatic indexing of all compatible columns.
|
|
204
|
+
Defaults to ``False``. Set ``True`` to restore legacy behaviour.
|
|
205
|
+
primary_key: Column name (or list) to use as primary key.
|
|
206
|
+
explain: If ``True``, return query plans instead of results.
|
|
185
207
|
"""
|
|
186
|
-
def __init__(self, uri: str, inner_table: Optional[_RustTable] = None, device: Optional[Any] = None, index_all: bool =
|
|
208
|
+
def __init__(self, uri: str, inner_table: Optional[_RustTable] = None, device: Optional[Any] = None, index_all: bool = False, primary_key: Optional[str] = None, explain: bool = False):
|
|
187
209
|
uri = _resolve_uri(uri)
|
|
188
210
|
self.explain = explain
|
|
189
211
|
if inner_table:
|
|
@@ -522,15 +544,15 @@ class Table:
|
|
|
522
544
|
"""
|
|
523
545
|
return self.to_arrow(filter, vector_filter, columns, device=device, **kwargs)
|
|
524
546
|
|
|
525
|
-
def vector_search(self, column: str, query: List[float], k: int = 10, filter: Optional[str] = None, device: Optional[Any] = None, **kwargs):
|
|
547
|
+
def vector_search(self, column: str, query: List[float], k: int = 10, filter: Optional[str] = None, columns: Optional[List[str]] = None, device: Optional[Any] = None, **kwargs):
|
|
526
548
|
"""Backward compatibility alias for to_pandas with vector filter."""
|
|
527
549
|
vf = {"column": column, "query": query, "k": k}
|
|
528
550
|
vf.update(kwargs)
|
|
529
|
-
return self.to_pandas(filter=filter, vector_filter=vf, device=device)
|
|
551
|
+
return self.to_pandas(filter=filter, vector_filter=vf, columns=columns, device=device)
|
|
530
552
|
|
|
531
|
-
def search(self, column: str, query: List[float], k: int = 10, filter: Optional[str] = None, device: Optional[Any] = None, **kwargs):
|
|
553
|
+
def search(self, column: str, query: List[float], k: int = 10, filter: Optional[str] = None, columns: Optional[List[str]] = None, device: Optional[Any] = None, **kwargs):
|
|
532
554
|
"""Alias for vector_search."""
|
|
533
|
-
return self.vector_search(column, query, k, filter, device, **kwargs)
|
|
555
|
+
return self.vector_search(column, query, k, filter, columns, device, **kwargs)
|
|
534
556
|
|
|
535
557
|
def filter(self, expr: Optional[str] = None, vector_filter: Optional[Union[Dict[str, Any], List[float]]] = None, **kwargs) -> 'Query':
|
|
536
558
|
"""
|
|
@@ -569,7 +591,16 @@ class Table:
|
|
|
569
591
|
|
|
570
592
|
@property
|
|
571
593
|
def index_all(self):
|
|
572
|
-
"""
|
|
594
|
+
"""
|
|
595
|
+
Whether to build HNSW/BM25 indexes for all compatible columns on commit.
|
|
596
|
+
|
|
597
|
+
Defaults to ``False`` (opt-in). Setting this to ``True`` triggers
|
|
598
|
+
background index builds after every ``commit()`` call — useful when
|
|
599
|
+
you want fast ANN search but be aware of the additional commit latency
|
|
600
|
+
(~15 s per 100 K rows with 768-dim vectors on CPU).
|
|
601
|
+
|
|
602
|
+
For selective indexing, prefer ``table.add_index(column, 'hnsw')``.
|
|
603
|
+
"""
|
|
573
604
|
return self._inner.get_index_all()
|
|
574
605
|
|
|
575
606
|
@index_all.setter
|
|
@@ -52,8 +52,66 @@ fn l2_distance_squared_portable(a: &[f32], b: &[f32]) -> f32 {
|
|
|
52
52
|
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
|
|
53
53
|
#[target_feature(enable = "avx2,fma")]
|
|
54
54
|
unsafe fn l2_distance_squared_avx2(a: &[f32], b: &[f32]) -> f32 {
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
#[cfg(target_arch = "x86")]
|
|
56
|
+
use std::arch::x86::*;
|
|
57
|
+
#[cfg(target_arch = "x86_64")]
|
|
58
|
+
use std::arch::x86_64::*;
|
|
59
|
+
|
|
60
|
+
let n = a.len();
|
|
61
|
+
let mut i = 0;
|
|
62
|
+
|
|
63
|
+
let mut sum0 = _mm256_setzero_ps();
|
|
64
|
+
let mut sum1 = _mm256_setzero_ps();
|
|
65
|
+
let mut sum2 = _mm256_setzero_ps();
|
|
66
|
+
let mut sum3 = _mm256_setzero_ps();
|
|
67
|
+
|
|
68
|
+
while i + 31 < n {
|
|
69
|
+
let a0 = _mm256_loadu_ps(a.as_ptr().add(i));
|
|
70
|
+
let b0 = _mm256_loadu_ps(b.as_ptr().add(i));
|
|
71
|
+
let diff0 = _mm256_sub_ps(a0, b0);
|
|
72
|
+
sum0 = _mm256_fmadd_ps(diff0, diff0, sum0);
|
|
73
|
+
|
|
74
|
+
let a1 = _mm256_loadu_ps(a.as_ptr().add(i + 8));
|
|
75
|
+
let b1 = _mm256_loadu_ps(b.as_ptr().add(i + 8));
|
|
76
|
+
let diff1 = _mm256_sub_ps(a1, b1);
|
|
77
|
+
sum1 = _mm256_fmadd_ps(diff1, diff1, sum1);
|
|
78
|
+
|
|
79
|
+
let a2 = _mm256_loadu_ps(a.as_ptr().add(i + 16));
|
|
80
|
+
let b2 = _mm256_loadu_ps(b.as_ptr().add(i + 16));
|
|
81
|
+
let diff2 = _mm256_sub_ps(a2, b2);
|
|
82
|
+
sum2 = _mm256_fmadd_ps(diff2, diff2, sum2);
|
|
83
|
+
|
|
84
|
+
let a3 = _mm256_loadu_ps(a.as_ptr().add(i + 24));
|
|
85
|
+
let b3 = _mm256_loadu_ps(b.as_ptr().add(i + 24));
|
|
86
|
+
let diff3 = _mm256_sub_ps(a3, b3);
|
|
87
|
+
sum3 = _mm256_fmadd_ps(diff3, diff3, sum3);
|
|
88
|
+
|
|
89
|
+
i += 32;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
sum0 = _mm256_add_ps(sum0, sum1);
|
|
93
|
+
sum2 = _mm256_add_ps(sum2, sum3);
|
|
94
|
+
sum0 = _mm256_add_ps(sum0, sum2);
|
|
95
|
+
|
|
96
|
+
while i + 7 < n {
|
|
97
|
+
let a0 = _mm256_loadu_ps(a.as_ptr().add(i));
|
|
98
|
+
let b0 = _mm256_loadu_ps(b.as_ptr().add(i));
|
|
99
|
+
let diff0 = _mm256_sub_ps(a0, b0);
|
|
100
|
+
sum0 = _mm256_fmadd_ps(diff0, diff0, sum0);
|
|
101
|
+
i += 8;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
let mut sum_array = [0.0f32; 8];
|
|
105
|
+
_mm256_storeu_ps(sum_array.as_mut_ptr(), sum0);
|
|
106
|
+
let mut total = sum_array.iter().sum::<f32>();
|
|
107
|
+
|
|
108
|
+
while i < n {
|
|
109
|
+
let diff = a[i] - b[i];
|
|
110
|
+
total += diff * diff;
|
|
111
|
+
i += 1;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
total
|
|
57
115
|
}
|
|
58
116
|
|
|
59
117
|
#[inline(always)]
|
|
@@ -76,6 +134,17 @@ pub fn cosine_similarity(a: &[f32], b: &[f32]) -> f32 {
|
|
|
76
134
|
|
|
77
135
|
#[inline(always)]
|
|
78
136
|
pub fn dot_product(a: &[f32], b: &[f32]) -> f32 {
|
|
137
|
+
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
|
|
138
|
+
{
|
|
139
|
+
if is_x86_feature_detected!("avx2") && is_x86_feature_detected!("fma") {
|
|
140
|
+
return unsafe { dot_product_avx2(a, b) };
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
dot_product_portable(a, b)
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
#[inline(always)]
|
|
147
|
+
fn dot_product_portable(a: &[f32], b: &[f32]) -> f32 {
|
|
79
148
|
let n = a.len();
|
|
80
149
|
assert_eq!(n, b.len(), "Vectors must have the same length");
|
|
81
150
|
|
|
@@ -100,6 +169,65 @@ pub fn dot_product(a: &[f32], b: &[f32]) -> f32 {
|
|
|
100
169
|
sum
|
|
101
170
|
}
|
|
102
171
|
|
|
172
|
+
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
|
|
173
|
+
#[target_feature(enable = "avx2,fma")]
|
|
174
|
+
unsafe fn dot_product_avx2(a: &[f32], b: &[f32]) -> f32 {
|
|
175
|
+
#[cfg(target_arch = "x86")]
|
|
176
|
+
use std::arch::x86::*;
|
|
177
|
+
#[cfg(target_arch = "x86_64")]
|
|
178
|
+
use std::arch::x86_64::*;
|
|
179
|
+
|
|
180
|
+
let n = a.len();
|
|
181
|
+
let mut i = 0;
|
|
182
|
+
|
|
183
|
+
let mut sum0 = _mm256_setzero_ps();
|
|
184
|
+
let mut sum1 = _mm256_setzero_ps();
|
|
185
|
+
let mut sum2 = _mm256_setzero_ps();
|
|
186
|
+
let mut sum3 = _mm256_setzero_ps();
|
|
187
|
+
|
|
188
|
+
while i + 31 < n {
|
|
189
|
+
let a0 = _mm256_loadu_ps(a.as_ptr().add(i));
|
|
190
|
+
let b0 = _mm256_loadu_ps(b.as_ptr().add(i));
|
|
191
|
+
sum0 = _mm256_fmadd_ps(a0, b0, sum0);
|
|
192
|
+
|
|
193
|
+
let a1 = _mm256_loadu_ps(a.as_ptr().add(i + 8));
|
|
194
|
+
let b1 = _mm256_loadu_ps(b.as_ptr().add(i + 8));
|
|
195
|
+
sum1 = _mm256_fmadd_ps(a1, b1, sum1);
|
|
196
|
+
|
|
197
|
+
let a2 = _mm256_loadu_ps(a.as_ptr().add(i + 16));
|
|
198
|
+
let b2 = _mm256_loadu_ps(b.as_ptr().add(i + 16));
|
|
199
|
+
sum2 = _mm256_fmadd_ps(a2, b2, sum2);
|
|
200
|
+
|
|
201
|
+
let a3 = _mm256_loadu_ps(a.as_ptr().add(i + 24));
|
|
202
|
+
let b3 = _mm256_loadu_ps(b.as_ptr().add(i + 24));
|
|
203
|
+
sum3 = _mm256_fmadd_ps(a3, b3, sum3);
|
|
204
|
+
|
|
205
|
+
i += 32;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
sum0 = _mm256_add_ps(sum0, sum1);
|
|
209
|
+
sum2 = _mm256_add_ps(sum2, sum3);
|
|
210
|
+
sum0 = _mm256_add_ps(sum0, sum2);
|
|
211
|
+
|
|
212
|
+
while i + 7 < n {
|
|
213
|
+
let a0 = _mm256_loadu_ps(a.as_ptr().add(i));
|
|
214
|
+
let b0 = _mm256_loadu_ps(b.as_ptr().add(i));
|
|
215
|
+
sum0 = _mm256_fmadd_ps(a0, b0, sum0);
|
|
216
|
+
i += 8;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
let mut sum_array = [0.0f32; 8];
|
|
220
|
+
_mm256_storeu_ps(sum_array.as_mut_ptr(), sum0);
|
|
221
|
+
let mut total = sum_array.iter().sum::<f32>();
|
|
222
|
+
|
|
223
|
+
while i < n {
|
|
224
|
+
total += a[i] * b[i];
|
|
225
|
+
i += 1;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
total
|
|
229
|
+
}
|
|
230
|
+
|
|
103
231
|
/// Vectorized batch L2 distance calculation
|
|
104
232
|
pub fn l2_distance_batch<V: AsRef<[f32]> + Sync>(query: &[f32], vectors: &[V]) -> Vec<f32> {
|
|
105
233
|
use rayon::prelude::*;
|
|
@@ -217,9 +345,53 @@ pub fn jaccard_distance(a: &[f32], b: &[f32]) -> f32 {
|
|
|
217
345
|
|
|
218
346
|
/// Bit-optimized Hamming distance for packed binary vectors (e.g. 1 bit per element)
|
|
219
347
|
pub fn hamming_distance_packed(a: &[u8], b: &[u8]) -> u32 {
|
|
348
|
+
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
|
|
349
|
+
{
|
|
350
|
+
if is_x86_feature_detected!("popcnt") {
|
|
351
|
+
return unsafe { hamming_distance_packed_popcnt(a, b) };
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
hamming_distance_packed_portable(a, b)
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
#[inline(always)]
|
|
358
|
+
fn hamming_distance_packed_portable(a: &[u8], b: &[u8]) -> u32 {
|
|
220
359
|
a.iter().zip(b.iter()).map(|(&x, &y)| (x ^ y).count_ones()).sum()
|
|
221
360
|
}
|
|
222
361
|
|
|
362
|
+
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
|
|
363
|
+
#[target_feature(enable = "popcnt")]
|
|
364
|
+
unsafe fn hamming_distance_packed_popcnt(a: &[u8], b: &[u8]) -> u32 {
|
|
365
|
+
#[cfg(target_arch = "x86")]
|
|
366
|
+
use std::arch::x86::*;
|
|
367
|
+
#[cfg(target_arch = "x86_64")]
|
|
368
|
+
use std::arch::x86_64::*;
|
|
369
|
+
|
|
370
|
+
let n = a.len();
|
|
371
|
+
let mut i = 0;
|
|
372
|
+
let mut sum = 0;
|
|
373
|
+
|
|
374
|
+
let a_ptr = a.as_ptr();
|
|
375
|
+
let b_ptr = b.as_ptr();
|
|
376
|
+
|
|
377
|
+
#[cfg(target_arch = "x86_64")]
|
|
378
|
+
{
|
|
379
|
+
while i + 7 < n {
|
|
380
|
+
let a_val = std::ptr::read_unaligned(a_ptr.add(i) as *const u64);
|
|
381
|
+
let b_val = std::ptr::read_unaligned(b_ptr.add(i) as *const u64);
|
|
382
|
+
sum += _popcnt64((a_val ^ b_val) as i64) as u32;
|
|
383
|
+
i += 8;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
while i < n {
|
|
388
|
+
sum += (a[i] ^ b[i]).count_ones();
|
|
389
|
+
i += 1;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
sum
|
|
393
|
+
}
|
|
394
|
+
|
|
223
395
|
/// Sparse dot product: intersection of two sorted index/value pairs
|
|
224
396
|
pub fn sparse_dot_product(
|
|
225
397
|
a_indices: &[u32], a_values: &[f32],
|
|
@@ -283,6 +455,17 @@ pub fn sparse_l2_distance_squared(
|
|
|
283
455
|
/// Optimized L2 distance for quantized u8 vectors
|
|
284
456
|
#[inline(always)]
|
|
285
457
|
pub fn l2_distance_u8(a: &[u8], b: &[u8]) -> f32 {
|
|
458
|
+
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
|
|
459
|
+
{
|
|
460
|
+
if is_x86_feature_detected!("avx2") {
|
|
461
|
+
return unsafe { l2_distance_u8_avx2(a, b) };
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
l2_distance_u8_portable(a, b)
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
#[inline(always)]
|
|
468
|
+
fn l2_distance_u8_portable(a: &[u8], b: &[u8]) -> f32 {
|
|
286
469
|
let mut sum = 0;
|
|
287
470
|
let chunks_a = a.chunks_exact(16);
|
|
288
471
|
let chunks_b = b.chunks_exact(16);
|
|
@@ -303,6 +486,55 @@ pub fn l2_distance_u8(a: &[u8], b: &[u8]) -> f32 {
|
|
|
303
486
|
sum as f32
|
|
304
487
|
}
|
|
305
488
|
|
|
489
|
+
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
|
|
490
|
+
#[target_feature(enable = "avx2")]
|
|
491
|
+
unsafe fn l2_distance_u8_avx2(a: &[u8], b: &[u8]) -> f32 {
|
|
492
|
+
#[cfg(target_arch = "x86")]
|
|
493
|
+
use std::arch::x86::*;
|
|
494
|
+
#[cfg(target_arch = "x86_64")]
|
|
495
|
+
use std::arch::x86_64::*;
|
|
496
|
+
|
|
497
|
+
let n = a.len();
|
|
498
|
+
let mut i = 0;
|
|
499
|
+
let mut sum_vec = _mm256_setzero_si256();
|
|
500
|
+
|
|
501
|
+
while i + 31 < n {
|
|
502
|
+
let a_vec = _mm256_loadu_si256(a.as_ptr().add(i) as *const __m256i);
|
|
503
|
+
let b_vec = _mm256_loadu_si256(b.as_ptr().add(i) as *const __m256i);
|
|
504
|
+
|
|
505
|
+
let zero = _mm256_setzero_si256();
|
|
506
|
+
|
|
507
|
+
let a_lo = _mm256_unpacklo_epi8(a_vec, zero);
|
|
508
|
+
let a_hi = _mm256_unpackhi_epi8(a_vec, zero);
|
|
509
|
+
|
|
510
|
+
let b_lo = _mm256_unpacklo_epi8(b_vec, zero);
|
|
511
|
+
let b_hi = _mm256_unpackhi_epi8(b_vec, zero);
|
|
512
|
+
|
|
513
|
+
let diff_lo = _mm256_sub_epi16(a_lo, b_lo);
|
|
514
|
+
let diff_hi = _mm256_sub_epi16(a_hi, b_hi);
|
|
515
|
+
|
|
516
|
+
let sq_lo = _mm256_madd_epi16(diff_lo, diff_lo);
|
|
517
|
+
let sq_hi = _mm256_madd_epi16(diff_hi, diff_hi);
|
|
518
|
+
|
|
519
|
+
sum_vec = _mm256_add_epi32(sum_vec, sq_lo);
|
|
520
|
+
sum_vec = _mm256_add_epi32(sum_vec, sq_hi);
|
|
521
|
+
|
|
522
|
+
i += 32;
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
let mut sum_array = [0i32; 8];
|
|
526
|
+
_mm256_storeu_si256(sum_array.as_mut_ptr() as *mut __m256i, sum_vec);
|
|
527
|
+
let mut total = sum_array.iter().sum::<i32>();
|
|
528
|
+
|
|
529
|
+
while i < n {
|
|
530
|
+
let diff = (a[i] as i32) - (b[i] as i32);
|
|
531
|
+
total += diff * diff;
|
|
532
|
+
i += 1;
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
total as f32
|
|
536
|
+
}
|
|
537
|
+
|
|
306
538
|
/// Asymmetric Distance Calculation (ADC) for quantized vectors.
|
|
307
539
|
/// Calculates L2 distance between a float32 query and a quantized u8 vector.
|
|
308
540
|
#[inline(always)]
|
|
@@ -88,6 +88,7 @@ pub enum HnswGraph {
|
|
|
88
88
|
TurboQuant8(Hnsw<u8, crate::core::index::distance::DistL2u8>),
|
|
89
89
|
TurboQuant4(Hnsw<u8, crate::core::index::distance::DistL2u4>),
|
|
90
90
|
SparseDot(Hnsw<crate::core::index::SparseVector, DistSparseDot>),
|
|
91
|
+
Pq(Hnsw<u8, crate::core::index::pq::DistPqSdc>),
|
|
91
92
|
}
|
|
92
93
|
|
|
93
94
|
impl HnswGraph {
|
|
@@ -103,6 +104,7 @@ impl HnswGraph {
|
|
|
103
104
|
(HnswGraph::BinaryHamming(h), VectorValue::Binary(q)) => h.search(q, k, ef, filter),
|
|
104
105
|
(HnswGraph::TurboQuant8(h), VectorValue::Binary(q)) => h.search(q, k, ef, filter),
|
|
105
106
|
(HnswGraph::TurboQuant4(h), VectorValue::Binary(q)) => h.search(q, k, ef, filter),
|
|
107
|
+
(HnswGraph::Pq(h), VectorValue::Binary(q)) => h.search(q, k, ef, filter),
|
|
106
108
|
(HnswGraph::SparseDot(h), VectorValue::Sparse(q)) => h.search(std::slice::from_ref(q), k, ef, filter),
|
|
107
109
|
|
|
108
110
|
// Casting paths
|
|
@@ -128,6 +130,7 @@ impl HnswGraph {
|
|
|
128
130
|
(HnswGraph::BinaryHamming(h), VectorValue::Binary(v)) => h.insert_slice((&v, local_id)),
|
|
129
131
|
(HnswGraph::TurboQuant8(h), VectorValue::Binary(v)) => h.insert_slice((&v, local_id)),
|
|
130
132
|
(HnswGraph::TurboQuant4(h), VectorValue::Binary(v)) => h.insert_slice((&v, local_id)),
|
|
133
|
+
(HnswGraph::Pq(h), VectorValue::Binary(v)) => h.insert_slice((&v, local_id)),
|
|
131
134
|
(HnswGraph::SparseDot(h), VectorValue::Sparse(v)) => h.insert_slice((&vec![v], local_id)),
|
|
132
135
|
|
|
133
136
|
(HnswGraph::L2(h), VectorValue::Float16(v)) => h.insert_slice((&v, local_id)),
|
|
@@ -167,6 +170,7 @@ impl HnswGraph {
|
|
|
167
170
|
HnswGraph::BinaryHamming(h) => h.file_dump(&path_string).map(|_| ()).map_err(|e| Box::new(std::io::Error::other(e)) as Box<dyn std::error::Error>),
|
|
168
171
|
HnswGraph::TurboQuant8(h) => h.file_dump(&path_string).map(|_| ()).map_err(|e| Box::new(std::io::Error::other(e)) as Box<dyn std::error::Error>),
|
|
169
172
|
HnswGraph::TurboQuant4(h) => h.file_dump(&path_string).map(|_| ()).map_err(|e| Box::new(std::io::Error::other(e)) as Box<dyn std::error::Error>),
|
|
173
|
+
HnswGraph::Pq(h) => h.file_dump(&path_string).map(|_| ()).map_err(|e| Box::new(std::io::Error::other(e)) as Box<dyn std::error::Error>),
|
|
170
174
|
HnswGraph::SparseDot(h) => h.file_dump(&path_string).map(|_| ()).map_err(|e| Box::new(std::io::Error::other(e)) as Box<dyn std::error::Error>),
|
|
171
175
|
}
|
|
172
176
|
}
|
|
@@ -285,10 +289,18 @@ impl HnswIvfIndex {
|
|
|
285
289
|
|
|
286
290
|
// Determine HNSW node type and distance metric
|
|
287
291
|
let hnsw = if let Some(q) = quantizer.as_ref() {
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
+
match q {
|
|
293
|
+
QuantizerImpl::TurboQuant(tq) => {
|
|
294
|
+
if tq.bits() == 4 {
|
|
295
|
+
HnswGraph::TurboQuant4(Hnsw::new(hnsw_m, vecs.len(), max_layers, ef_construction, crate::core::index::distance::DistL2u4))
|
|
296
|
+
} else {
|
|
297
|
+
HnswGraph::TurboQuant8(Hnsw::new(hnsw_m, vecs.len(), max_layers, ef_construction, crate::core::index::distance::DistL2u8))
|
|
298
|
+
}
|
|
299
|
+
},
|
|
300
|
+
QuantizerImpl::Pq(pq) => {
|
|
301
|
+
let dist = crate::core::index::pq::DistPqSdc { pq: std::sync::Arc::new(pq.clone()) };
|
|
302
|
+
HnswGraph::Pq(Hnsw::new(hnsw_m, vecs.len(), max_layers, ef_construction, dist))
|
|
303
|
+
}
|
|
292
304
|
}
|
|
293
305
|
} else {
|
|
294
306
|
match metric {
|
|
@@ -333,6 +345,7 @@ impl HnswIvfIndex {
|
|
|
333
345
|
|
|
334
346
|
/// Search for k nearest neighbors
|
|
335
347
|
pub fn search(&self, query: &VectorValue, k: usize, n_probe: usize, filter: Option<&roaring::RoaringBitmap>) -> Result<Vec<(usize, f32)>> {
|
|
348
|
+
let t_start = std::time::Instant::now();
|
|
336
349
|
let query_f32 = match query {
|
|
337
350
|
VectorValue::Float32(v) => v,
|
|
338
351
|
VectorValue::Float16(v) => v,
|
|
@@ -342,10 +355,10 @@ impl HnswIvfIndex {
|
|
|
342
355
|
};
|
|
343
356
|
|
|
344
357
|
// Pre-quantize query if needed for faster graph traversal (SDC)
|
|
345
|
-
let effective_query =
|
|
346
|
-
VectorValue::Binary(q.encode(query_f32))
|
|
347
|
-
|
|
348
|
-
query.clone()
|
|
358
|
+
let effective_query = match self.quantizer {
|
|
359
|
+
Some(QuantizerImpl::TurboQuant(ref q)) => VectorValue::Binary(q.encode(query_f32)),
|
|
360
|
+
Some(QuantizerImpl::Pq(ref q)) => VectorValue::Binary(q.encode(query_f32)),
|
|
361
|
+
_ => query.clone()
|
|
349
362
|
};
|
|
350
363
|
|
|
351
364
|
// Step 1: Find n_probe nearest clusters (coarse search)
|
|
@@ -368,10 +381,14 @@ impl HnswIvfIndex {
|
|
|
368
381
|
cluster_distances.sort_by(|a, b| a.1.partial_cmp(&b.1).unwrap_or(std::cmp::Ordering::Equal));
|
|
369
382
|
|
|
370
383
|
let clusters_to_search: Vec<usize> = cluster_distances.iter().take(n_probe).map(|(i, _)| *i).collect();
|
|
384
|
+
let t_coarse = t_start.elapsed();
|
|
385
|
+
let t_fine_start = std::time::Instant::now();
|
|
371
386
|
|
|
372
|
-
// Step 2: Search HNSW graphs in selected clusters
|
|
387
|
+
// Step 2: Search HNSW graphs in selected clusters sequentially (fine search)
|
|
388
|
+
// Avoid into_par_iter() here to prevent Rayon thread pool contention,
|
|
389
|
+
// since queries are already parallelized across segments in query.rs
|
|
373
390
|
let mut candidates: Vec<(usize, f32)> = clusters_to_search
|
|
374
|
-
.
|
|
391
|
+
.into_iter()
|
|
375
392
|
.flat_map(|cluster_id| {
|
|
376
393
|
if let Some((hnsw, row_id_mapping)) = self.cluster_graphs.get(&cluster_id) {
|
|
377
394
|
let cluster_k = if filter.is_some() { k * 4 } else { k * 2 };
|
|
@@ -416,9 +433,11 @@ impl HnswIvfIndex {
|
|
|
416
433
|
.collect();
|
|
417
434
|
|
|
418
435
|
// Step 3: Merge and return top-k
|
|
419
|
-
candidates.
|
|
436
|
+
candidates.sort_by(|a, b| a.1.partial_cmp(&b.1).unwrap());
|
|
420
437
|
candidates.dedup_by_key(|x| x.0); // Remove duplicates
|
|
421
438
|
candidates.truncate(k);
|
|
439
|
+
let t_fine = t_fine_start.elapsed();
|
|
440
|
+
println!("Search Profile -> Coarse: {:?}, Fine: {:?}", t_coarse, t_fine);
|
|
422
441
|
Ok(candidates)
|
|
423
442
|
}
|
|
424
443
|
|
|
@@ -745,7 +764,12 @@ impl HnswIvfIndex {
|
|
|
745
764
|
}
|
|
746
765
|
} else if kv.key == "quantizer_config" {
|
|
747
766
|
if let Some(ref val) = kv.value {
|
|
748
|
-
|
|
767
|
+
if let Some(mut q) = serde_json::from_str::<QuantizerImpl>(val).ok() {
|
|
768
|
+
if let QuantizerImpl::Pq(ref mut pq) = q {
|
|
769
|
+
pq.init_lut();
|
|
770
|
+
}
|
|
771
|
+
loaded_quantizer = Some(q);
|
|
772
|
+
}
|
|
749
773
|
}
|
|
750
774
|
}
|
|
751
775
|
}
|
|
@@ -805,13 +829,22 @@ impl HnswIvfIndex {
|
|
|
805
829
|
// For now we assume L2 if not specified or derive from path?
|
|
806
830
|
// Better: HnswIvfIndex should save metric in centroids parquet metadata.
|
|
807
831
|
|
|
808
|
-
let hnsw = if let Some(
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
.
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
832
|
+
let hnsw = if let Some(q_impl) = q_inner {
|
|
833
|
+
match q_impl {
|
|
834
|
+
QuantizerImpl::TurboQuant(q) => {
|
|
835
|
+
if q.bits() == 4 {
|
|
836
|
+
HnswGraph::TurboQuant4(crate::core::index::hnsw_rs::hnswio::load_hnsw_with_dist(&mut graph_reader, &description, crate::core::index::distance::DistL2u4, &mut data_reader)
|
|
837
|
+
.map_err(|e| anyhow::anyhow!("HNSW load failed: {}", e))?)
|
|
838
|
+
} else {
|
|
839
|
+
HnswGraph::TurboQuant8(crate::core::index::hnsw_rs::hnswio::load_hnsw_with_dist(&mut graph_reader, &description, crate::core::index::distance::DistL2u8, &mut data_reader)
|
|
840
|
+
.map_err(|e| anyhow::anyhow!("HNSW load failed: {}", e))?)
|
|
841
|
+
}
|
|
842
|
+
},
|
|
843
|
+
QuantizerImpl::Pq(pq) => {
|
|
844
|
+
let dist = crate::core::index::pq::DistPqSdc { pq: std::sync::Arc::new(pq.clone()) };
|
|
845
|
+
HnswGraph::Pq(crate::core::index::hnsw_rs::hnswio::load_hnsw_with_dist(&mut graph_reader, &description, dist, &mut data_reader)
|
|
846
|
+
.map_err(|e| anyhow::anyhow!("HNSW load failed: {}", e))?)
|
|
847
|
+
}
|
|
815
848
|
}
|
|
816
849
|
} else {
|
|
817
850
|
match metric {
|