Replies: 9 comments 27 replies
-
|
Could you add some kind of plots? Deciphering these tables is hard. Thank you! |
Beta Was this translation helpful? Give feedback.
-
|
Why is the memory limit differing and not constant among benchmarks? |
Beta Was this translation helpful? Give feedback.
-
|
There have been some changes.
07_stackoverflow_tables_oltpDataset: stackoverflow-large
08_stackoverflow_tables_olapDataset: stackoverflow-large
09_stackoverflow_graph_oltpDataset: stackoverflow-large
10_stackoverflow_graph_olapDataset: stackoverflow-large
Note
|
Beta Was this translation helpful? Give feedback.
-
|
Some improvements: |
Beta Was this translation helpful? Give feedback.
-
07_stackoverflow_tables_oltpDataset: stackoverflow-large
08_stackoverflow_tables_olapDataset: stackoverflow-large
09_stackoverflow_graph_oltpDataset: stackoverflow-large
10_stackoverflow_graph_olapDataset: stackoverflow-large
Note
|
Beta Was this translation helpful? Give feedback.
-
|
These benchmark reruns reflect the recent Python vector updates after the March 2026 11_vector_index_buildDataset: stackoverflow-medium
Dataset: stackoverflow-large
12_vector_searchDataset: stackoverflow-medium
Dataset: stackoverflow-large
Notes
|
Beta Was this translation helpful? Give feedback.
-
|
Use INT8 quantization (biggest impact, no recall loss) When creating the index, add quantization: "INT8": CREATE INDEX ON VectorData (vector) LSM_VECTOR METADATA {
"dimensions": 384,
"similarity": "COSINE",
"quantization": "INT8"
}Or in the Python bindings: db.create_vector_index(
vertex_type="VectorData",
vector_property="vector",
dimensions=384,
distance_function="cosine",
quantization="INT8"
)This alone cuts latency by 2.5x (3.50ms → 1.59ms at 500K) because vectors are read from compact contiguous index pages instead of full document lookups. |
Beta Was this translation helpful? Give feedback.
-
|
now GAV is stable, I ran with GAV enabled. The queries are much faster. But I still couldn't run this with less memory than 32g. 10_stackoverflow_graph_olapDataset: stackoverflow-large
|
Beta Was this translation helpful? Give feedback.
-
|
@lvca |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
Benchmarking DBs
The original markdown file can be found at https://github.com/humemai/arcadedb-embedded-python/blob/main/bindings/python/examples/benchmark_results/README.md
ArcadeDB: current problems and likely improvements
Based on the benchmark results in this document, the main ArcadeDB bottlenecks are:
the other vector backends, and the large Stack Overflow run did not finish within the
practical time budget. This is gonna be hard to improve, since its mainly due to the
JVector library problem.
stronger ANN backends on both latency and recall in these runs.
completed. This is understandable for an OLTP-oriented engine, but the gap is still
larger than it should be relative to other OLTP or mixed-workload systems.
show that post-load indexing often consumes a disproportionate share of total runtime.
some regress, which suggests shared contention or execution-path bottlenecks.
Dataset overview
The Stack Overflow dataset is used in two different shapes across these benchmarks:
Users,Posts,Comments,Badges,Votes,PostLinks,Tags, andPostHistory.with 6 vertex types and 9 edge types.
neighborhood traversal, and basic analytical queries, but it does not yet stress
deeper multi-hop traversals or richer relationship patterns. Future benchmark work
should add more complex graph datasets with longer paths, denser connectivity, and
more heterogeneous relationship structures.
Graph schema used by Examples 09 and 10:
User,Question,Answer,Tag,Badge,CommentASKED,ANSWERED,HAS_ANSWER,ACCEPTED_ANSWER,TAGGED_WITH,COMMENTED_ON,COMMENTED_ON_ANSWER,EARNED,LINKED_TOVector corpus used by Examples 11 and 12:
Title + Body; answers embedBody; comments embedTextafterHTML stripping and whitespace normalization.
all-MiniLM-L6-v2, which yields normalized384-dimensional
float32vectors; long texts are truncated to the model's maxsequence length.
.f32shards with a default shard size of 100,000vectors, alongside per-corpus and combined ids/meta files.
sampled queries with top-50 neighbors.
stackoverflow-medium
stackoverflow-large
Things to note
NVMe SSD).
lower limits.
distribute the memory limit across client (20%) and server (80%) for the latter. The
rss_peak_mibcolumn includes combined client and server RSS for client-serverbackends.
filenames, and per-run provenance stay in the raw run artifacts and section summaries.
07_stackoverflow_tables_oltp
26.3.1and26.4.1-SNAPSHOT; local wheel versions26.3.1and26.4.1.dev0; DuckDB1.5.0; PostgreSQL18.3; SQLite3.46.1.preload_time_sis data ingest only,index_time_sis post-ingest index build, andoltp_crud_time_s/throughput_smeasure OLTP CRUD only.throughput_sis computed asop_count / oltp_crud_time_s.stackoverflow-medium
Dataset: stackoverflow-large
08_stackoverflow_tables_olap
26.4.1-SNAPSHOT; local wheel version26.4.1.dev0;DuckDB
1.5.0; PostgreSQL18.3; SQLite3.46.1.load_*is ingest only,index_*is post-ingest index build, andquery_*is OLAP query-suite execution.run_labelidentifies the benchmark run(s) included in each DB summary row.Dataset: stackoverflow-medium
Dataset: stackoverflow-large
09_stackoverflow_graph_oltp
26.3.1and26.4.1-SNAPSHOT; local wheel versions26.3.1and26.4.1.dev0; Ladybug0.15.1; DuckDB1.5.0; SQLite3.46.1.schema_time_s/index_time_s/load_time_s/counts_time_sare setup phases;oltp_crud_time_sand latency metrics are OLTP workload only.throughput_sis computed asop_count / oltp_crud_time_s.Dataset: stackoverflow-medium
Dataset: stackoverflow-large
10_stackoverflow_graph_olap
26.4.1-SNAPSHOT; local wheel version26.4.1.dev0;Ladybug
0.15.1; DuckDB1.5.0; SQLite3.46.1.load_*is ingest only,index_*is post-ingest index build, andquery_*is OLAP query-suite execution.result_hashandrow_countacross DBs.Dataset: stackoverflow-medium
Dataset: stackoverflow-large
11_vector_index_build
26.4.1.dev0on tag26.4.1-SNAPSHOT; Faiss1.13.2;LanceDB
0.29.2; Milvus2.6.10; Postgres18.3; Qdrant1.11.3.HNSWwhen supported by the installed version; otherwiseit falls back to single-partition
IVF_HNSW_SQ.HNSWFlat~= 100%;pgvector/Qdrant/Milvus HNSW ~= 85-95%; LanceDB pure
HNSW~= 90-95%; LanceDBsingle-partition
IVF_HNSW_SQ~= 75%; bruteforce is exact search, not HNSW.du_mibis measured filesystem usage fromdisk_usage_du.json.Dataset: stackoverflow-medium
Dataset: stackoverflow-large
12_vector_search
26.4.1.dev0on tag26.4.1-SNAPSHOT; Faiss1.13.2;LanceDB
0.29.2and0.30.0; Milvus2.6.10; Postgres18.3; Qdrant1.11.3.search_run_labelis the Example 12 sweep label;build_run_labelis theExample 11 build label for the reused DB directory.
ef_searchtuning when available; for thesingle-partition IVF fallback it also pins
nprobes=1.HNSWFlat~= 100%;pgvector/Qdrant/Milvus HNSW ~= 85-95%; LanceDB pure
HNSW~= 90-95%; LanceDBsingle-partition
IVF_HNSW_SQ~= 75%; bruteforce is exact search, not HNSW.du_mibis measured filesystem usage fromdisk_usage_du_search.json.Dataset: stackoverflow-medium
Dataset: stackoverflow-large
Beta Was this translation helpful? Give feedback.
All reactions