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
34 changes: 25 additions & 9 deletions BerlinMOD/benchmarks/batch/bench/bench_mbdb.sh
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
BERLINMOD_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
BMROOT="$(cd "${SCRIPT_DIR}/../../.." && pwd)" # repo BerlinMOD/ dir (canonical loaders)
QUERIES_SQL="${SCRIPT_DIR}/queries.sql" # single canonical query source

# ── defaults ──────────────────────────────────────────────────────────────────
DBNAME="berlinmod_bench"
Expand Down Expand Up @@ -99,11 +101,11 @@ _psql() { psql -d "$DBNAME" -q "$@"; }
if $LOAD; then
echo "=== Creating database: $DBNAME ==="
createdb "$DBNAME" 2>/dev/null || true
LOADER=$(mktemp --suffix=.sql)
trap 'rm -f "$LOADER"' EXIT
sed "s|DATADIR|${DATADIR}|g" "${BERLINMOD_DIR}/load_mbdb.sql" > "$LOADER"
echo "=== Loading data ==="
_psql -f "$LOADER"
echo "=== Loading data (canonical berlinmod_load + th3index setup) ==="
_psql -v ON_ERROR_STOP=1 -c "CREATE EXTENSION IF NOT EXISTS MobilityDB CASCADE;"
_psql -v ON_ERROR_STOP=1 -f "${BMROOT}/berlinmod_load.sql"
_psql -v ON_ERROR_STOP=1 -c "SELECT berlinmod_load('${DATADIR}/', true);"
_psql -v ON_ERROR_STOP=1 -f "${BMROOT}/berlinmod_th3index_setup.sql"
echo " done."
fi

Expand Down Expand Up @@ -152,15 +154,29 @@ echo "=== Runs : ${RUNS} per query (queries: ${QUERIES_MSG}) ==="
echo ""

TIMEFILE=$(mktemp)
trap 'rm -f "$TIMEFILE"' EXIT
QDIR=$(mktemp -d)
trap 'rm -f "$TIMEFILE"; rm -rf "$QDIR"' EXIT

# Split the single canonical queries.sql on its `-- @query <id>` markers.
for Q in "${QUERIES[@]}"; do
QFILE="${BERLINMOD_DIR}/${Q}.sql"
[[ -f "$QFILE" ]] || { echo " [skip] ${Q} — SQL file not found"; continue; }
awk -v s="-- @query ${Q}" '
index($0, s)==1 { grab=1; next }
grab && /^-- @query / { exit }
grab { print }
' "$QUERIES_SQL" > "${QDIR}/${Q}.sql"
done

for Q in "${QUERIES[@]}"; do
QFILE="${QDIR}/${Q}.sql"
[[ -s "$QFILE" ]] || { echo " [skip] ${Q} — not in queries.sql"; continue; }
if ! ERR=$(_psql -v ON_ERROR_STOP=1 -o /dev/null -f "$QFILE" 2>&1); then
echo " [FAIL] ${Q} — ${ERR##*ERROR: }"
continue
fi
printf " timing %-6s: " "$Q"
for RUN in $(seq 1 "$RUNS"); do
T0=$(date +%s%3N)
_psql -o /dev/null -f "$QFILE" 2>/dev/null || true
_psql -o /dev/null -f "$QFILE" >/dev/null 2>&1
T1=$(date +%s%3N)
ELAPSED=$((T1 - T0))
printf "%d " "$ELAPSED"
Expand Down
30 changes: 23 additions & 7 deletions BerlinMOD/benchmarks/batch/bench/bench_mduck.sh
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
BERLINMOD_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
BMROOT="$(cd "${SCRIPT_DIR}/../../.." && pwd)" # repo BerlinMOD/ dir (canonical loaders)
QUERIES_SQL="${SCRIPT_DIR}/queries.sql" # single canonical query source

# ── defaults ──────────────────────────────────────────────────────────────────
DUCKDB="${DUCKDB:-duckdb}"
Expand Down Expand Up @@ -114,8 +116,8 @@ _duck_q() { "$DUCKDB" "$DBFILE" -noheader -list -c "$1" 2>/dev/null; }
if $LOAD; then
echo "=== Loading data into: $DBFILE ==="
rm -f "$DBFILE"
LOAD_BODY="$(sed '/^SET VARIABLE DATADIR/d' "${BERLINMOD_DIR}/load_mduck.sql")"
LOAD_SQL="${MOBILITY_LOAD} SET VARIABLE DATADIR='${DATADIR}/'; ${LOAD_BODY}"
LOAD_BODY="$(sed '/^SET VARIABLE data_dir/d' "${BMROOT}/mobilityduck_load.sql")"
LOAD_SQL="${MOBILITY_LOAD} SET VARIABLE data_dir='${DATADIR}/'; ${LOAD_BODY}"
"$DUCKDB" "$DBFILE" -c "$LOAD_SQL"
echo " done."
fi
Expand Down Expand Up @@ -165,15 +167,29 @@ echo ""
TIMEFILE=$(mktemp)
trap 'rm -f "$TIMEFILE"' EXIT

# Split the single canonical queries.sql on its `-- @query <id>` markers.
QDIR=$(mktemp -d)
trap 'rm -f "$TIMEFILE"; rm -rf "$QDIR"' EXIT
for Q in "${QUERIES[@]}"; do
QFILE="${BERLINMOD_DIR}/${Q}.sql"
[[ -f "$QFILE" ]] || { echo " [skip] ${Q} — SQL file not found"; continue; }
QSQL=$(grep -v '^\s*--' "$QFILE" | tr '\n' ' ')
awk -v s="-- @query ${Q}" '
index($0, s)==1 { grab=1; next }
grab && /^-- @query / { exit }
grab { print }
' "$QUERIES_SQL" | grep -v '^\s*--' | tr '\n' ' ' > "${QDIR}/${Q}.sql"
done

for Q in "${QUERIES[@]}"; do
QSQL=$(cat "${QDIR}/${Q}.sql")
[[ -n "${QSQL// /}" ]] || { echo " [skip] ${Q} — not in queries.sql"; continue; }
# mobilityduck_load creates its tables in the default (main) schema.
if ! ERR=$("$DUCKDB" "$DBFILE" -c "${MOBILITY_LOAD} ${QSQL}" 2>&1 >/dev/null); then
echo " [FAIL] ${Q} — $(echo "$ERR" | grep -iE 'error' | head -1)"
continue
fi
printf " timing %-6s: " "$Q"
for RUN in $(seq 1 "$RUNS"); do
T0=$(date +%s%3N)
"$DUCKDB" "$DBFILE" -c "${MOBILITY_LOAD} SET search_path='portable,main'; ${QSQL}" \
> /dev/null 2>&1 || true
"$DUCKDB" "$DBFILE" -c "${MOBILITY_LOAD} ${QSQL}" > /dev/null 2>&1 || true
T1=$(date +%s%3N)
ELAPSED=$((T1 - T0))
printf "%d " "$ELAPSED"
Expand Down
Loading
Loading