Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -43,3 +43,9 @@ arcticdb/store

# Python venvs created by install scripts
myenv

# Pivot's local datastores and generated server configs
pivot-parquet/catalog
pivot-parquet/config.yaml
pivot-parquet-partitioned/catalog
pivot-parquet-partitioned/config.yaml
4 changes: 4 additions & 0 deletions pivot-parquet-partitioned/benchmark.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/bin/bash
export BENCH_DOWNLOAD_SCRIPT="download-hits-parquet-partitioned"
export BENCH_CONCURRENT_DURATION="${BENCH_CONCURRENT_DURATION:-0}"
exec ../lib/benchmark-common.sh
5 changes: 5 additions & 0 deletions pivot-parquet-partitioned/check
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/bash
set -e
: "${PIVOT_PORT:=5432}"

psql -h 127.0.0.1 -p "$PIVOT_PORT" -U pivot -d postgres -c 'SELECT 1' >/dev/null
117 changes: 117 additions & 0 deletions pivot-parquet-partitioned/create.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
-- Pivot-flavoured ClickBench schema. Maps the original ClickBench schema onto
-- the SQL types pivot's planner understands (BIGINT, INTEGER, SMALLINT,
-- VARCHAR). EventTime/EventDate are stored in the source parquet as packed
-- epoch seconds / days, so they're declared as their integer storage type here;
-- the queries read them as real dates on demand via
-- `make_timestamp(EventTime * 1000000)` (the function counts microseconds, as it
-- does in DuckDB, while the column counts seconds) and `make_date(EventDate)`. CHAR(...) columns are widened to VARCHAR.
--
-- `load` substitutes `{source}` with the directory holding hits.parquet.
DROP TABLE IF EXISTS hits;
CREATE TABLE hits (
WatchID BIGINT,
JavaEnable SMALLINT,
Title VARCHAR,
GoodEvent SMALLINT,
EventTime BIGINT,
EventDate USMALLINT,
CounterID INTEGER,
ClientIP INTEGER,
RegionID INTEGER,
UserID BIGINT,
CounterClass SMALLINT,
OS SMALLINT,
UserAgent SMALLINT,
URL VARCHAR,
Referer VARCHAR,
IsRefresh SMALLINT,
RefererCategoryID SMALLINT,
RefererRegionID INTEGER,
URLCategoryID SMALLINT,
URLRegionID INTEGER,
ResolutionWidth SMALLINT,
ResolutionHeight SMALLINT,
ResolutionDepth SMALLINT,
FlashMajor SMALLINT,
FlashMinor SMALLINT,
FlashMinor2 VARCHAR,
NetMajor SMALLINT,
NetMinor SMALLINT,
UserAgentMajor SMALLINT,
UserAgentMinor VARCHAR,
CookieEnable SMALLINT,
JavascriptEnable SMALLINT,
IsMobile SMALLINT,
MobilePhone SMALLINT,
MobilePhoneModel VARCHAR,
Params VARCHAR,
IPNetworkID INTEGER,
TraficSourceID SMALLINT,
SearchEngineID SMALLINT,
SearchPhrase VARCHAR,
AdvEngineID SMALLINT,
IsArtifical SMALLINT,
WindowClientWidth SMALLINT,
WindowClientHeight SMALLINT,
ClientTimeZone SMALLINT,
ClientEventTime BIGINT,
SilverlightVersion1 SMALLINT,
SilverlightVersion2 SMALLINT,
SilverlightVersion3 INTEGER,
SilverlightVersion4 SMALLINT,
PageCharset VARCHAR,
CodeVersion INTEGER,
IsLink SMALLINT,
IsDownload SMALLINT,
IsNotBounce SMALLINT,
FUniqID BIGINT,
OriginalURL VARCHAR,
HID INTEGER,
IsOldCounter SMALLINT,
IsEvent SMALLINT,
IsParameter SMALLINT,
DontCountHits SMALLINT,
WithHash SMALLINT,
HitColor VARCHAR,
LocalEventTime BIGINT,
Age SMALLINT,
Sex SMALLINT,
Income SMALLINT,
Interests SMALLINT,
Robotness SMALLINT,
RemoteIP INTEGER,
WindowName INTEGER,
OpenerName INTEGER,
HistoryLength SMALLINT,
BrowserLanguage VARCHAR,
BrowserCountry VARCHAR,
SocialNetwork VARCHAR,
SocialAction VARCHAR,
HTTPError SMALLINT,
SendTiming INTEGER,
DNSTiming INTEGER,
ConnectTiming INTEGER,
ResponseStartTiming INTEGER,
ResponseEndTiming INTEGER,
FetchTiming INTEGER,
SocialSourceNetworkID SMALLINT,
SocialSourcePage VARCHAR,
ParamPrice BIGINT,
ParamOrderID VARCHAR,
ParamCurrency VARCHAR,
ParamCurrencyID SMALLINT,
OpenstatServiceName VARCHAR,
OpenstatCampaignID VARCHAR,
OpenstatAdID VARCHAR,
OpenstatSourceID VARCHAR,
UTMSource VARCHAR,
UTMMedium VARCHAR,
UTMCampaign VARCHAR,
UTMContent VARCHAR,
UTMTerm VARCHAR,
FromTag VARCHAR,
HasGCLID SMALLINT,
RefererHash BIGINT,
URLHash BIGINT,
CLID INTEGER
) WITH (with_pre_existing_parquets = '{source}');
5 changes: 5 additions & 0 deletions pivot-parquet-partitioned/data-size
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/bash
set -eu

# No ingestion — the reported size is the parquet files the table reads.
du -bc data/hits_*.parquet | tail -n1 | cut -f1
9 changes: 9 additions & 0 deletions pivot-parquet-partitioned/install
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#!/bin/bash
set -eu

sudo apt-get update -y
sudo apt-get install -y curl postgresql-client

# The official installer: it puts the `pivot` binary under $HOME/.pivot (or
# $PIVOT_HOME) and needs no root. ./start runs it from there.
curl https://pivotlake.io | sh
13 changes: 13 additions & 0 deletions pivot-parquet-partitioned/load
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#!/bin/bash
set -eu
: "${PIVOT_PORT:=5432}"

# No ingestion: the table adopts the parquet files in place, so the files the
# driver downloaded have to stay around for the whole run.
mkdir -p data
mv hits_*.parquet data/

sed "s|{source}|$PWD/data|g" create.sql |
psql -h 127.0.0.1 -p "$PIVOT_PORT" -U pivot -d postgres -v ON_ERROR_STOP=1 -f -

sync
33 changes: 33 additions & 0 deletions pivot-parquet-partitioned/make-json.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#!/bin/bash
# Turns a finished run into results/<YYYYMMDD>/<machine>.json.
#
# ./benchmark.sh
# ./make-json.sh c6a.4xlarge
#
# The per-try timings come from result.csv, which the driver writes as
# <query>,<try>,<seconds>; the metadata comes from template.json. The table
# adopts the downloaded parquet files in place, so the load is a catalog write and
# the data size is the files' own.
set -eu

machine=${1:?usage: $0 <machine>}
date=$(date -u +%Y-%m-%d)
output="results/${date//-/}/$machine.json"

mkdir -p "$(dirname "$output")"
jq -n \
--slurpfile template template.json \
--arg date "$date" \
--arg machine "$machine" \
--rawfile csv result.csv \
'$template[0] + {
date: $date,
machine: $machine,
cluster_size: 1,
load_time: 0,
data_size: 14737666736,
result: ($csv | split("\n") | map(select(length > 0) | split(","))
| group_by(.[0] | tonumber) | sort_by(.[0][0] | tonumber)
| map(map(.[2] | if . == "null" then null else tonumber end)))
}' > "$output"
echo "$output"
43 changes: 43 additions & 0 deletions pivot-parquet-partitioned/queries.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
SELECT COUNT(*) FROM hits
SELECT COUNT(*) FROM hits WHERE AdvEngineID <> 0
SELECT SUM(AdvEngineID), COUNT(*), AVG(ResolutionWidth) FROM hits
SELECT AVG(UserID) FROM hits
SELECT COUNT(DISTINCT UserID) FROM hits
SELECT COUNT(DISTINCT SearchPhrase) FROM hits
SELECT MIN(EventDate), MAX(EventDate) FROM hits
SELECT AdvEngineID, COUNT(*) FROM hits WHERE AdvEngineID <> 0 GROUP BY AdvEngineID ORDER BY COUNT(*) DESC
SELECT RegionID, COUNT(DISTINCT UserID) AS u FROM hits GROUP BY RegionID ORDER BY u DESC LIMIT 10
SELECT RegionID, SUM(AdvEngineID), COUNT(*) AS c, AVG(ResolutionWidth), COUNT(DISTINCT UserID) FROM hits GROUP BY RegionID ORDER BY c DESC LIMIT 10
SELECT MobilePhoneModel, COUNT(DISTINCT UserID) AS u FROM hits WHERE MobilePhoneModel <> '' GROUP BY MobilePhoneModel ORDER BY u DESC LIMIT 10
SELECT MobilePhone, MobilePhoneModel, COUNT(DISTINCT UserID) AS u FROM hits WHERE MobilePhoneModel <> '' GROUP BY MobilePhone, MobilePhoneModel ORDER BY u DESC LIMIT 10
SELECT SearchPhrase, COUNT(*) AS c FROM hits WHERE SearchPhrase <> '' GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10
SELECT SearchPhrase, COUNT(DISTINCT UserID) AS u FROM hits WHERE SearchPhrase <> '' GROUP BY SearchPhrase ORDER BY u DESC LIMIT 10
SELECT SearchEngineID, SearchPhrase, COUNT(*) AS c FROM hits WHERE SearchPhrase <> '' GROUP BY SearchEngineID, SearchPhrase ORDER BY c DESC LIMIT 10
SELECT UserID, COUNT(*) FROM hits GROUP BY UserID ORDER BY COUNT(*) DESC LIMIT 10
SELECT UserID, SearchPhrase, COUNT(*) FROM hits GROUP BY UserID, SearchPhrase ORDER BY COUNT(*) DESC LIMIT 10
SELECT UserID, SearchPhrase, COUNT(*) FROM hits GROUP BY UserID, SearchPhrase LIMIT 10
SELECT UserID, extract(minute FROM make_timestamp(EventTime * 1000000)) AS m, SearchPhrase, COUNT(*) FROM hits GROUP BY UserID, m, SearchPhrase ORDER BY COUNT(*) DESC LIMIT 10
SELECT UserID FROM hits WHERE UserID = 435090932899640449
SELECT COUNT(*) FROM hits WHERE URL LIKE '%google%'
SELECT SearchPhrase, MIN(URL), COUNT(*) AS c FROM hits WHERE URL LIKE '%google%' AND SearchPhrase <> '' GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10
SELECT SearchPhrase, MIN(URL), MIN(Title), COUNT(*) AS c, COUNT(DISTINCT UserID) FROM hits WHERE Title LIKE '%Google%' AND URL NOT LIKE '%.google.%' AND SearchPhrase <> '' GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10
SELECT * FROM hits WHERE URL LIKE '%google%' ORDER BY EventTime LIMIT 10
SELECT SearchPhrase FROM hits WHERE SearchPhrase <> '' ORDER BY EventTime LIMIT 10
SELECT SearchPhrase FROM hits WHERE SearchPhrase <> '' ORDER BY SearchPhrase LIMIT 10
SELECT SearchPhrase FROM hits WHERE SearchPhrase <> '' ORDER BY EventTime, SearchPhrase LIMIT 10
SELECT CounterID, AVG(length(URL)) AS l, COUNT(*) AS c FROM hits WHERE URL <> '' GROUP BY CounterID HAVING COUNT(*) > 100000 ORDER BY l DESC LIMIT 25
SELECT REGEXP_JIT_REPLACE(Referer, '^https?://(?:www\.)?([^/]+)/.*$', '\1') AS k, AVG(length(Referer)) AS l, COUNT(*) AS c, MIN(Referer) FROM hits WHERE Referer <> '' GROUP BY k HAVING COUNT(*) > 100000 ORDER BY l DESC LIMIT 25
SELECT SUM(ResolutionWidth), SUM(ResolutionWidth + 1), SUM(ResolutionWidth + 2), SUM(ResolutionWidth + 3), SUM(ResolutionWidth + 4), SUM(ResolutionWidth + 5), SUM(ResolutionWidth + 6), SUM(ResolutionWidth + 7), SUM(ResolutionWidth + 8), SUM(ResolutionWidth + 9), SUM(ResolutionWidth + 10), SUM(ResolutionWidth + 11), SUM(ResolutionWidth + 12), SUM(ResolutionWidth + 13), SUM(ResolutionWidth + 14), SUM(ResolutionWidth + 15), SUM(ResolutionWidth + 16), SUM(ResolutionWidth + 17), SUM(ResolutionWidth + 18), SUM(ResolutionWidth + 19), SUM(ResolutionWidth + 20), SUM(ResolutionWidth + 21), SUM(ResolutionWidth + 22), SUM(ResolutionWidth + 23), SUM(ResolutionWidth + 24), SUM(ResolutionWidth + 25), SUM(ResolutionWidth + 26), SUM(ResolutionWidth + 27), SUM(ResolutionWidth + 28), SUM(ResolutionWidth + 29), SUM(ResolutionWidth + 30), SUM(ResolutionWidth + 31), SUM(ResolutionWidth + 32), SUM(ResolutionWidth + 33), SUM(ResolutionWidth + 34), SUM(ResolutionWidth + 35), SUM(ResolutionWidth + 36), SUM(ResolutionWidth + 37), SUM(ResolutionWidth + 38), SUM(ResolutionWidth + 39), SUM(ResolutionWidth + 40), SUM(ResolutionWidth + 41), SUM(ResolutionWidth + 42), SUM(ResolutionWidth + 43), SUM(ResolutionWidth + 44), SUM(ResolutionWidth + 45), SUM(ResolutionWidth + 46), SUM(ResolutionWidth + 47), SUM(ResolutionWidth + 48), SUM(ResolutionWidth + 49), SUM(ResolutionWidth + 50), SUM(ResolutionWidth + 51), SUM(ResolutionWidth + 52), SUM(ResolutionWidth + 53), SUM(ResolutionWidth + 54), SUM(ResolutionWidth + 55), SUM(ResolutionWidth + 56), SUM(ResolutionWidth + 57), SUM(ResolutionWidth + 58), SUM(ResolutionWidth + 59), SUM(ResolutionWidth + 60), SUM(ResolutionWidth + 61), SUM(ResolutionWidth + 62), SUM(ResolutionWidth + 63), SUM(ResolutionWidth + 64), SUM(ResolutionWidth + 65), SUM(ResolutionWidth + 66), SUM(ResolutionWidth + 67), SUM(ResolutionWidth + 68), SUM(ResolutionWidth + 69), SUM(ResolutionWidth + 70), SUM(ResolutionWidth + 71), SUM(ResolutionWidth + 72), SUM(ResolutionWidth + 73), SUM(ResolutionWidth + 74), SUM(ResolutionWidth + 75), SUM(ResolutionWidth + 76), SUM(ResolutionWidth + 77), SUM(ResolutionWidth + 78), SUM(ResolutionWidth + 79), SUM(ResolutionWidth + 80), SUM(ResolutionWidth + 81), SUM(ResolutionWidth + 82), SUM(ResolutionWidth + 83), SUM(ResolutionWidth + 84), SUM(ResolutionWidth + 85), SUM(ResolutionWidth + 86), SUM(ResolutionWidth + 87), SUM(ResolutionWidth + 88), SUM(ResolutionWidth + 89) FROM hits
SELECT SearchEngineID, ClientIP, COUNT(*) AS c, SUM(IsRefresh), AVG(ResolutionWidth) FROM hits WHERE SearchPhrase <> '' GROUP BY SearchEngineID, ClientIP ORDER BY c DESC LIMIT 10
SELECT WatchID, ClientIP, COUNT(*) AS c, SUM(IsRefresh), AVG(ResolutionWidth) FROM hits WHERE SearchPhrase <> '' GROUP BY WatchID, ClientIP ORDER BY c DESC LIMIT 10
SELECT WatchID, ClientIP, COUNT(*) AS c, SUM(IsRefresh), AVG(ResolutionWidth) FROM hits GROUP BY WatchID, ClientIP ORDER BY c DESC LIMIT 10
SELECT URL, COUNT(*) AS c FROM hits GROUP BY URL ORDER BY c DESC LIMIT 10
SELECT 1, URL, COUNT(*) AS c FROM hits GROUP BY 1, URL ORDER BY c DESC LIMIT 10
SELECT ClientIP, ClientIP - 1, ClientIP - 2, ClientIP - 3, COUNT(*) AS c FROM hits GROUP BY ClientIP, ClientIP - 1, ClientIP - 2, ClientIP - 3 ORDER BY c DESC LIMIT 10
SELECT URL, COUNT(*) AS PageViews FROM hits WHERE CounterID = 62 AND make_date(EventDate) >= '2013-07-01' AND make_date(EventDate) <= '2013-07-31' AND DontCountHits = 0 AND IsRefresh = 0 AND URL <> '' GROUP BY URL ORDER BY PageViews DESC LIMIT 10
SELECT Title, COUNT(*) AS PageViews FROM hits WHERE CounterID = 62 AND make_date(EventDate) >= '2013-07-01' AND make_date(EventDate) <= '2013-07-31' AND DontCountHits = 0 AND IsRefresh = 0 AND Title <> '' GROUP BY Title ORDER BY PageViews DESC LIMIT 10
SELECT URL, COUNT(*) AS PageViews FROM hits WHERE CounterID = 62 AND make_date(EventDate) >= '2013-07-01' AND make_date(EventDate) <= '2013-07-31' AND IsRefresh = 0 AND IsLink <> 0 AND IsDownload = 0 GROUP BY URL ORDER BY PageViews DESC LIMIT 10 OFFSET 1000
SELECT TraficSourceID, SearchEngineID, AdvEngineID, CASE WHEN (SearchEngineID = 0 AND AdvEngineID = 0) THEN Referer ELSE '' END AS Src, URL AS Dst, COUNT(*) AS PageViews FROM hits WHERE CounterID = 62 AND make_date(EventDate) >= '2013-07-01' AND make_date(EventDate) <= '2013-07-31' AND IsRefresh = 0 GROUP BY TraficSourceID, SearchEngineID, AdvEngineID, Src, Dst ORDER BY PageViews DESC LIMIT 10 OFFSET 1000
SELECT URLHash, make_date(EventDate) AS EventDate, COUNT(*) AS PageViews FROM hits WHERE CounterID = 62 AND make_date(EventDate) >= '2013-07-01' AND make_date(EventDate) <= '2013-07-31' AND IsRefresh = 0 AND TraficSourceID IN (-1, 6) AND RefererHash = 3594120000172545465 GROUP BY URLHash, make_date(EventDate) ORDER BY PageViews DESC LIMIT 10 OFFSET 100
SELECT WindowClientWidth, WindowClientHeight, COUNT(*) AS PageViews FROM hits WHERE CounterID = 62 AND make_date(EventDate) >= '2013-07-01' AND make_date(EventDate) <= '2013-07-31' AND IsRefresh = 0 AND DontCountHits = 0 AND URLHash = 2868770270353813622 GROUP BY WindowClientWidth, WindowClientHeight ORDER BY PageViews DESC LIMIT 10 OFFSET 10000
SELECT DATE_TRUNC('minute', make_timestamp(EventTime * 1000000)) AS M, COUNT(*) AS PageViews FROM hits WHERE CounterID = 62 AND make_date(EventDate) >= '2013-07-14' AND make_date(EventDate) <= '2013-07-15' AND IsRefresh = 0 AND DontCountHits = 0 GROUP BY DATE_TRUNC('minute', make_timestamp(EventTime * 1000000)) ORDER BY DATE_TRUNC('minute', make_timestamp(EventTime * 1000000)) LIMIT 10 OFFSET 1000
27 changes: 27 additions & 0 deletions pivot-parquet-partitioned/query
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#!/bin/bash
# Reads a SQL query from stdin and runs it via psql against Pivot.
# Stdout: query result.
# Stderr: query runtime in fractional seconds on the last line (parsed from
# psql's `\timing` "Time: <ms> ms" output).
# Exit non-zero on error.
set -e
: "${PIVOT_PORT:=5432}"

query=$(cat)

raw=$(psql -h 127.0.0.1 -p "$PIVOT_PORT" -U pivot -d postgres -v ON_ERROR_STOP=1 -t -c '\timing' -c "$query" 2>&1) && exit_code=0 || exit_code=$?

if [ "$exit_code" -ne 0 ] || printf '%s\n' "$raw" | grep -qE '^(ERROR|FATAL|PANIC):|psql: error'; then
printf '%s\n' "$raw" >&2
exit 1
fi

printf '%s\n' "$raw" | grep -v '^Time:'

ms=$(printf '%s\n' "$raw" | grep -oP 'Time:\s*\K[0-9.]+' | tail -n1)
if [ -z "$ms" ]; then
echo "no Time: in psql output" >&2
exit 1
fi

awk -v m="$ms" 'BEGIN { printf "%.3f\n", m / 1000 }' >&2
60 changes: 60 additions & 0 deletions pivot-parquet-partitioned/results/20261001/c6a.2xlarge.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
{
"system": "Pivotlake (Parquet, partitioned)",
"date": "2026-10-01",
"machine": "c6a.2xlarge",
"cluster_size": 1,
"proprietary": "no",
"hardware": "cpu",
"tuned": "no",
"tags": ["Rust","column-oriented","PostgreSQL compatible","stateless"],
"load_time": 0,
"data_size": 14737666736,
"concurrent_qps": null,
"concurrent_error_ratio": null,
"result": [
[0.006, 0, 0],
[0.035, 0.01, 0.011],
[0.16, 0.039, 0.04],
[0.695, 0.043, 0.044],
[0.943, 0.301, 0.3],
[0.642, 0.467, 0.461],
[0.053, 0.026, 0.027],
[0.037, 0.013, 0.013],
[0.561, 0.446, 0.447],
[1.23, 0.701, 0.695],
[0.238, 0.098, 0.1],
[0.388, 0.132, 0.132],
[0.538, 0.183, 0.185],
[1.896, 0.52, 0.522],
[0.623, 0.212, 0.209],
[0.387, 0.26, 0.258],
[1.627, 0.688, 0.689],
[1.599, 0.564, 0.559],
[3.798, 1.482, 1.487],
[0.376, 0.011, 0.01],
[9.291, 0.466, 0.536],
[10.649, 0.587, 0.593],
[21.026, 12.382, 10.633],
[1.605, 0.062, 0.065],
[0.053, 0.014, 0.014],
[0.519, 0.064, 0.063],
[0.072, 0.014, 0.015],
[9.246, 0.597, 0.67],
[7.867, 2.136, 2.13],
[0.084, 0.03, 0.03],
[1.601, 0.252, 0.244],
[4.978, 0.309, 0.31],
[4.041, 1.052, 1.059],
[9.279, 8.436, 7.662],
[9.294, 8.265, 7.503],
[0.316, 0.271, 0.271],
[0.093, 0.021, 0.019],
[0.032, 0.011, 0.012],
[0.059, 0.01, 0.01],
[0.116, 0.04, 0.039],
[0.027, 0.009, 0.009],
[0.019, 0.01, 0.007],
[0.022, 0.012, 0.011]
]
}

60 changes: 60 additions & 0 deletions pivot-parquet-partitioned/results/20261001/c6a.4xlarge.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
{
"system": "Pivotlake (Parquet, partitioned)",
"date": "2026-10-01",
"machine": "c6a.4xlarge",
"cluster_size": 1,
"proprietary": "no",
"hardware": "cpu",
"tuned": "no",
"tags": ["Rust","column-oriented","PostgreSQL compatible","stateless"],
"load_time": 0,
"data_size": 14737666736,
"concurrent_qps": null,
"concurrent_error_ratio": null,
"result": [
[0.006, 0, 0],
[0.025, 0.009, 0.009],
[0.049, 0.022, 0.022],
[0.089, 0.026, 0.025],
[0.21, 0.172, 0.172],
[0.582, 0.267, 0.268],
[0.025, 0.016, 0.014],
[0.027, 0.01, 0.011],
[0.457, 0.274, 0.274],
[0.746, 0.449, 0.451],
[0.115, 0.061, 0.063],
[0.144, 0.079, 0.081],
[0.529, 0.165, 0.163],
[1.792, 0.409, 0.408],
[0.592, 0.196, 0.194],
[0.187, 0.15, 0.15],
[1.582, 0.368, 0.363],
[1.586, 0.344, 0.343],
[3.644, 1.084, 1.07],
[0.073, 0.011, 0.011],
[9.185, 0.271, 0.271],
[10.778, 0.328, 0.322],
[21.027, 0.755, 0.8],
[1.603, 0.069, 0.07],
[0.04, 0.014, 0.013],
[0.481, 0.038, 0.038],
[0.043, 0.018, 0.015],
[9.285, 0.249, 0.247],
[7.804, 1.087, 1.074],
[0.047, 0.017, 0.018],
[1.49, 0.176, 0.177],
[4.972, 0.284, 0.284],
[4.36, 1.279, 1.277],
[9.181, 0.846, 0.85],
[9.031, 0.849, 0.845],
[0.185, 0.161, 0.158],
[0.041, 0.019, 0.02],
[0.024, 0.011, 0.011],
[0.047, 0.009, 0.01],
[0.078, 0.04, 0.044],
[0.02, 0.01, 0.008],
[0.019, 0.009, 0.009],
[0.018, 0.008, 0.008]
]
}

Loading
Loading