11from dataclasses import dataclass
2+ from typing import List
23import re
34import os
45import 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
3137class 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 )
0 commit comments