@@ -4,7 +4,7 @@ extern crate test;
4
4
5
5
#[ cfg( test) ]
6
6
mod tests {
7
- use std:: iter ;
7
+ use std:: ops :: RangeInclusive ;
8
8
use std:: sync:: Arc ;
9
9
10
10
use common:: OwnedBytes ;
@@ -71,27 +71,24 @@ mod tests {
71
71
} ) ;
72
72
}
73
73
74
- fn get_exp_data ( ) -> Vec < u64 > {
74
+ const FIFTY_PERCENT_RANGE : RangeInclusive < u64 > = 1 ..=50 ;
75
+ const SINGLE_ITEM : u64 = 90 ;
76
+ const SINGLE_ITEM_RANGE : RangeInclusive < u64 > = 90 ..=90 ;
77
+ const ONE_PERCENT_ITEM_RANGE : RangeInclusive < u64 > = 49 ..=49 ;
78
+ fn get_data_50percent_item ( ) -> Vec < u128 > {
79
+ let mut rng = StdRng :: from_seed ( [ 1u8 ; 32 ] ) ;
80
+
75
81
let mut data = vec ! [ ] ;
76
- for i in 0 ..100 {
77
- let num = i * i ;
78
- data. extend ( iter :: repeat ( i as u64 ) . take ( num ) ) ;
82
+ for _ in 0 ..300_000 {
83
+ let val = rng . gen_range ( 1 ..= 100 ) ;
84
+ data. push ( val ) ;
79
85
}
80
- data. shuffle ( & mut StdRng :: from_seed ( [ 1u8 ; 32 ] ) ) ;
86
+ data. push ( SINGLE_ITEM ) ;
81
87
82
- // lengt = 328350
88
+ data. shuffle ( & mut rng) ;
89
+ let data = data. iter ( ) . map ( |el| * el as u128 ) . collect :: < Vec < _ > > ( ) ;
83
90
data
84
91
}
85
-
86
- fn get_data_50percent_item ( ) -> ( u128 , u128 , Vec < u128 > ) {
87
- let mut permutation = get_exp_data ( ) ;
88
- let major_item = 20 ;
89
- let minor_item = 10 ;
90
- permutation. extend ( iter:: repeat ( major_item) . take ( permutation. len ( ) ) ) ;
91
- permutation. shuffle ( & mut StdRng :: from_seed ( [ 1u8 ; 32 ] ) ) ;
92
- let permutation = permutation. iter ( ) . map ( |el| * el as u128 ) . collect :: < Vec < _ > > ( ) ;
93
- ( major_item as u128 , minor_item as u128 , permutation)
94
- }
95
92
fn get_u128_column_random ( ) -> Arc < dyn Column < u128 > > {
96
93
let permutation = generate_random ( ) ;
97
94
let permutation = permutation. iter ( ) . map ( |el| * el as u128 ) . collect :: < Vec < _ > > ( ) ;
@@ -106,15 +103,82 @@ mod tests {
106
103
open_u128 :: < u128 > ( out) . unwrap ( )
107
104
}
108
105
106
+ // U64 RANGE START
107
+ #[ bench]
108
+ fn bench_intfastfield_getrange_u64_50percent_hit ( b : & mut Bencher ) {
109
+ let data = get_data_50percent_item ( ) ;
110
+ let data = data. iter ( ) . map ( |el| * el as u64 ) . collect :: < Vec < _ > > ( ) ;
111
+ let column: Arc < dyn Column < u64 > > = serialize_and_load ( & data) ;
112
+
113
+ b. iter ( || {
114
+ let mut positions = Vec :: new ( ) ;
115
+ column. get_docids_for_value_range (
116
+ FIFTY_PERCENT_RANGE ,
117
+ 0 ..data. len ( ) as u32 ,
118
+ & mut positions,
119
+ ) ;
120
+ positions
121
+ } ) ;
122
+ }
123
+
124
+ #[ bench]
125
+ fn bench_intfastfield_getrange_u64_1percent_hit ( b : & mut Bencher ) {
126
+ let data = get_data_50percent_item ( ) ;
127
+ let data = data. iter ( ) . map ( |el| * el as u64 ) . collect :: < Vec < _ > > ( ) ;
128
+ let column: Arc < dyn Column < u64 > > = serialize_and_load ( & data) ;
129
+
130
+ b. iter ( || {
131
+ let mut positions = Vec :: new ( ) ;
132
+ column. get_docids_for_value_range (
133
+ ONE_PERCENT_ITEM_RANGE ,
134
+ 0 ..data. len ( ) as u32 ,
135
+ & mut positions,
136
+ ) ;
137
+ positions
138
+ } ) ;
139
+ }
140
+
141
+ #[ bench]
142
+ fn bench_intfastfield_getrange_u64_single_hit ( b : & mut Bencher ) {
143
+ let data = get_data_50percent_item ( ) ;
144
+ let data = data. iter ( ) . map ( |el| * el as u64 ) . collect :: < Vec < _ > > ( ) ;
145
+ let column: Arc < dyn Column < u64 > > = serialize_and_load ( & data) ;
146
+
147
+ b. iter ( || {
148
+ let mut positions = Vec :: new ( ) ;
149
+ column. get_docids_for_value_range (
150
+ SINGLE_ITEM_RANGE ,
151
+ 0 ..data. len ( ) as u32 ,
152
+ & mut positions,
153
+ ) ;
154
+ positions
155
+ } ) ;
156
+ }
157
+
158
+ #[ bench]
159
+ fn bench_intfastfield_getrange_u64_hit_all ( b : & mut Bencher ) {
160
+ let data = get_data_50percent_item ( ) ;
161
+ let data = data. iter ( ) . map ( |el| * el as u64 ) . collect :: < Vec < _ > > ( ) ;
162
+ let column: Arc < dyn Column < u64 > > = serialize_and_load ( & data) ;
163
+
164
+ b. iter ( || {
165
+ let mut positions = Vec :: new ( ) ;
166
+ column. get_docids_for_value_range ( 0 ..=u64:: MAX , 0 ..data. len ( ) as u32 , & mut positions) ;
167
+ positions
168
+ } ) ;
169
+ }
170
+ // U64 RANGE END
171
+
172
+ // U128 RANGE START
109
173
#[ bench]
110
174
fn bench_intfastfield_getrange_u128_50percent_hit ( b : & mut Bencher ) {
111
- let ( major_item , _minor_item , data) = get_data_50percent_item ( ) ;
175
+ let data = get_data_50percent_item ( ) ;
112
176
let column = get_u128_column_from_data ( & data) ;
113
177
114
178
b. iter ( || {
115
179
let mut positions = Vec :: new ( ) ;
116
180
column. get_docids_for_value_range (
117
- major_item..=major_item ,
181
+ * FIFTY_PERCENT_RANGE . start ( ) as u128 ..= * FIFTY_PERCENT_RANGE . end ( ) as u128 ,
118
182
0 ..data. len ( ) as u32 ,
119
183
& mut positions,
120
184
) ;
@@ -124,13 +188,13 @@ mod tests {
124
188
125
189
#[ bench]
126
190
fn bench_intfastfield_getrange_u128_single_hit ( b : & mut Bencher ) {
127
- let ( _major_item , minor_item , data) = get_data_50percent_item ( ) ;
191
+ let data = get_data_50percent_item ( ) ;
128
192
let column = get_u128_column_from_data ( & data) ;
129
193
130
194
b. iter ( || {
131
195
let mut positions = Vec :: new ( ) ;
132
196
column. get_docids_for_value_range (
133
- minor_item..=minor_item ,
197
+ * SINGLE_ITEM_RANGE . start ( ) as u128 ..= * SINGLE_ITEM_RANGE . end ( ) as u128 ,
134
198
0 ..data. len ( ) as u32 ,
135
199
& mut positions,
136
200
) ;
@@ -140,7 +204,7 @@ mod tests {
140
204
141
205
#[ bench]
142
206
fn bench_intfastfield_getrange_u128_hit_all ( b : & mut Bencher ) {
143
- let ( _major_item , _minor_item , data) = get_data_50percent_item ( ) ;
207
+ let data = get_data_50percent_item ( ) ;
144
208
let column = get_u128_column_from_data ( & data) ;
145
209
146
210
b. iter ( || {
@@ -149,6 +213,7 @@ mod tests {
149
213
positions
150
214
} ) ;
151
215
}
216
+ // U128 RANGE END
152
217
153
218
#[ bench]
154
219
fn bench_intfastfield_scan_all_fflookup_u128 ( b : & mut Bencher ) {
0 commit comments