Skip to content

Commit 9b9c4ec

Browse files
committed
adding range query execute
1 parent 92154c7 commit 9b9c4ec

File tree

4 files changed

+68
-12
lines changed

4 files changed

+68
-12
lines changed

script/bench.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
WRITE_FACTOR = 0.4
1313
READ_FACTOR = 0.2
1414
MIXED_RATIO = 0.5
15-
SELECTIVITY_FACTOR = [0.01, 0.1, 0.25]
15+
SELECTIVITY_FACTOR = ["0.01", "0.1", "0.25"]
1616
RANGE_QUERY_FACTOR = 0.5
1717
PRELOAD = False
1818

script/infra/db.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,10 @@ def __init__(self, db_path: str) -> None:
2525
preload_creation_time INT,
2626
write_time INT,
2727
mixed_time INT,
28-
read_time INT
28+
read_time INT,
29+
range_read_time_short INT,
30+
range_read_time_mid INT,
31+
range_read_time_long INT,
2932
);
3033
"""
3134
)
@@ -56,8 +59,11 @@ def log_row(
5659
preload_creation_time,
5760
write_time,
5861
mixed_time,
59-
read_time
60-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
62+
read_time,
63+
range_read_time_short,
64+
range_read_time_mid,
65+
range_read_time_long
66+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
6167
""",
6268
(
6369
datetime.now(timezone.utc),
@@ -75,6 +81,9 @@ def log_row(
7581
stats.write_time,
7682
stats.mixed_time,
7783
stats.read_time,
84+
stats.range_read_time_short,
85+
stats.range_read_time_mid,
86+
stats.range_read_time_long,
7887
),
7988
)
8089
self.db_con.commit()

script/infra/pybliss.py

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from dataclasses import dataclass
2+
from typing import List
23
import re
34
import os
45
import logging
@@ -14,6 +15,8 @@ class BlissArgs:
1415
write_factor: float
1516
read_factor: float
1617
mixed_ratio: float
18+
range_query_factor: float
19+
selectivity: List[str]
1720
seed: int = 0
1821
file_type: str = "binary"
1922
use_preload: bool = False
@@ -26,6 +29,9 @@ class BlissStats:
2629
write_time: int
2730
read_time: int
2831
mixed_time: int
32+
range_read_time_short: int = 0
33+
range_read_time_mid: int = 0
34+
range_read_time_long: int = 0
2935

3036

3137
class PyBliss:
@@ -51,10 +57,13 @@ def __init__(
5157
self.preload_creation_time_regex = re.compile(
5258
r"\[[0-9 :.-]+\] \[info\] Preload Creation Time \(ns\): (\d+)"
5359
)
60+
self.range_read_time_regex = re.compile(
61+
r"\[[0-9 :.-]+\] \[info\] Range Query Times \(ns\) for selectivity \[([\d\., ]+)\]: ([\d\., ]+)"
62+
)
5463

5564
def run_single_bliss_bench(self, args: BlissArgs) -> BlissStats:
5665
if self.smoke_test:
57-
return BlissStats(*(random.randint(0, 2 << 16) for _ in range(5)))
66+
return BlissStats(*(random.randint(0, 2 << 16) for _ in range(8)))
5867

5968
cmd = [
6069
self.bliss_execute_path,
@@ -67,8 +76,8 @@ def run_single_bliss_bench(self, args: BlissArgs) -> BlissStats:
6776
f"--seed {args.seed}",
6877
f"--file_type {'binary' if args.file_type else 'txt'}",
6978
"--use_preload" if args.use_preload else "",
70-
f"--selectivity ${args.selectivity.join(",")}",
71-
f"--range_query_factor ${args.range_query_factor}",
79+
f"--selectivity " + ",".join(args.selectivity),
80+
f"--range_query_factor {args.range_query_factor}",
7281
]
7382
process = subprocess.Popen(
7483
" ".join(cmd),
@@ -95,6 +104,23 @@ def run_single_bliss_bench(self, args: BlissArgs) -> BlissStats:
95104
read_time = self.read_time_regex.search(proc_results)
96105
read_time = int(read_time.group(1)) if read_time else 0
97106

107+
# Extract range query times from the comma-separated list
108+
range_times_match = self.range_read_time_regex.search(proc_results)
109+
range_read_time_short = 0
110+
range_read_time_mid = 0
111+
range_read_time_long = 0
112+
113+
if range_times_match:
114+
range_times_str = range_times_match.group(2)
115+
range_times = [int(x.strip()) for x in range_times_str.split(',')]
116+
117+
if len(range_times) >= 1:
118+
range_read_time_short = range_times[0]
119+
if len(range_times) >= 2:
120+
range_read_time_mid = range_times[1]
121+
if len(range_times) >= 3:
122+
range_read_time_long = range_times[2]
123+
98124
os.makedirs("./run_logs", exist_ok=True)
99125
_, file_name = os.path.split(args.data_file)
100126
file_name, _ = os.path.splitext(file_name + f"_{args.index_type}")
@@ -107,4 +133,7 @@ def run_single_bliss_bench(self, args: BlissArgs) -> BlissStats:
107133
write_time=write_time,
108134
read_time=read_time,
109135
mixed_time=mixed_time,
136+
range_read_time_short=range_read_time_short,
137+
range_read_time_mid=range_read_time_mid,
138+
range_read_time_long=range_read_time_long,
110139
)

src/bliss_bench.cpp

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -148,21 +148,39 @@ void workload_executor(bliss::BlissIndex<key_type, value_type> &tree,
148148
// Timing for range queries with configured amount
149149
if (num_ranges > 0) {
150150
spdlog::debug("Executing {} range queries", num_ranges);
151+
std::vector<unsigned long long> range_times;
152+
std::string selectivity_values;
153+
154+
// Process all selectivity factors first
151155
for (const auto& selectivity : config.selectivity_factor) {
152-
auto range_time = time_function([&]() {
153-
executor::execute_range_queries(tree, data, num_ranges, selectivity);
154-
});
156+
auto range_time = 0ULL;
155157
try {
156-
index->get(0, 0);
158+
range_time = time_function([&]() {
159+
executor::execute_range_queries(tree, data, num_ranges, selectivity);
160+
});
157161
} catch (const std::exception& e) {
158162
if (std::string(e.what()) == "Not implemented") {
159163
range_time = 0;
160164
} else {
161165
throw;
162166
}
163167
}
164-
spdlog::info("Range Query Time (ns) for selectivity {}: {}", selectivity, range_time);
168+
169+
range_times.push_back(range_time);
170+
if (!selectivity_values.empty()) {
171+
selectivity_values += ", ";
172+
}
173+
selectivity_values += std::to_string(selectivity);
174+
}
175+
176+
std::string time_values;
177+
for (size_t i = 0; i < range_times.size(); ++i) {
178+
if (i > 0) time_values += ", ";
179+
time_values += std::to_string(range_times[i]);
165180
}
181+
182+
spdlog::info("Range Query Times (ns) for selectivity [{}]: {}",
183+
selectivity_values, time_values);
166184
}
167185
}
168186

0 commit comments

Comments
 (0)