Skip to content
This repository was archived by the owner on Apr 4, 2023. It is now read-only.

Commit 794c0f6

Browse files
bors[bot]irevoire
andauthored
Merge #315
315: Rewrite the indexing benchmarks r=Kerollmops a=irevoire There was a panic on the benchmark and while I was trying to understand what was happening I decided to rewrite the way the benchmarks were working. Before we were creating a database with the good setting, and then for each benchmarks we were: 1. Deleting all documents in the database 2. Indexing a batch of documents Now for each iteration we recreate entirely a new database from scratch. Since deleting all the documents in a database may not be the same as starting with a fresh new database I prefer this solution. Co-authored-by: Irevoire <tamo@meilisearch.com>
2 parents 731e0e5 + 4b99d8c commit 794c0f6

File tree

1 file changed

+129
-155
lines changed

1 file changed

+129
-155
lines changed

benchmarks/benches/indexing.rs

Lines changed: 129 additions & 155 deletions
Original file line numberDiff line numberDiff line change
@@ -31,48 +31,43 @@ fn setup_index() -> Index {
3131
}
3232

3333
fn indexing_songs_default(c: &mut Criterion) {
34-
let index = setup_index();
35-
36-
let update_builder = UpdateBuilder::new(0);
37-
let mut wtxn = index.write_txn().unwrap();
38-
let mut builder = update_builder.settings(&mut wtxn, &index);
39-
40-
builder.set_primary_key("id".to_owned());
41-
let displayed_fields = ["title", "album", "artist", "genre", "country", "released", "duration"]
42-
.iter()
43-
.map(|s| s.to_string())
44-
.collect();
45-
builder.set_displayed_fields(displayed_fields);
46-
47-
let searchable_fields = ["title", "album", "artist"].iter().map(|s| s.to_string()).collect();
48-
builder.set_searchable_fields(searchable_fields);
49-
50-
let faceted_fields = ["released-timestamp", "duration-float", "genre", "country", "artist"]
51-
.iter()
52-
.map(|s| s.to_string())
53-
.collect();
54-
builder.set_filterable_fields(faceted_fields);
55-
builder.execute(|_, _| ()).unwrap();
56-
wtxn.commit().unwrap();
57-
58-
let index_ref = &index;
59-
6034
let mut group = c.benchmark_group("indexing");
6135
group.sample_size(10);
6236
group.bench_function("Indexing songs with default settings", |b| {
6337
b.iter_with_setup(
6438
move || {
39+
let index = setup_index();
40+
6541
let update_builder = UpdateBuilder::new(0);
66-
let mut wtxn = index_ref.write_txn().unwrap();
67-
let builder = update_builder.delete_documents(&mut wtxn, index_ref).unwrap();
68-
builder.execute().unwrap();
42+
let mut wtxn = index.write_txn().unwrap();
43+
let mut builder = update_builder.settings(&mut wtxn, &index);
44+
45+
builder.set_primary_key("id".to_owned());
46+
let displayed_fields =
47+
["title", "album", "artist", "genre", "country", "released", "duration"]
48+
.iter()
49+
.map(|s| s.to_string())
50+
.collect();
51+
builder.set_displayed_fields(displayed_fields);
52+
53+
let searchable_fields =
54+
["title", "album", "artist"].iter().map(|s| s.to_string()).collect();
55+
builder.set_searchable_fields(searchable_fields);
56+
57+
let faceted_fields =
58+
["released-timestamp", "duration-float", "genre", "country", "artist"]
59+
.iter()
60+
.map(|s| s.to_string())
61+
.collect();
62+
builder.set_filterable_fields(faceted_fields);
63+
builder.execute(|_, _| ()).unwrap();
6964
wtxn.commit().unwrap();
70-
()
65+
index
7166
},
72-
move |_| {
67+
move |index| {
7368
let update_builder = UpdateBuilder::new(0);
74-
let mut wtxn = index_ref.write_txn().unwrap();
75-
let mut builder = update_builder.index_documents(&mut wtxn, index_ref);
69+
let mut wtxn = index.write_txn().unwrap();
70+
let mut builder = update_builder.index_documents(&mut wtxn, &index);
7671

7772
builder.update_format(UpdateFormat::Csv);
7873
builder.index_documents_method(IndexDocumentsMethod::ReplaceDocuments);
@@ -82,53 +77,48 @@ fn indexing_songs_default(c: &mut Criterion) {
8277
));
8378
builder.execute(reader, |_, _| ()).unwrap();
8479
wtxn.commit().unwrap();
80+
81+
index.prepare_for_closing().wait();
8582
},
8683
)
8784
});
88-
89-
index.prepare_for_closing().wait();
9085
}
9186

9287
fn indexing_songs_without_faceted_numbers(c: &mut Criterion) {
93-
let index = setup_index();
94-
95-
let update_builder = UpdateBuilder::new(0);
96-
let mut wtxn = index.write_txn().unwrap();
97-
let mut builder = update_builder.settings(&mut wtxn, &index);
98-
99-
builder.set_primary_key("id".to_owned());
100-
let displayed_fields = ["title", "album", "artist", "genre", "country", "released", "duration"]
101-
.iter()
102-
.map(|s| s.to_string())
103-
.collect();
104-
builder.set_displayed_fields(displayed_fields);
105-
106-
let searchable_fields = ["title", "album", "artist"].iter().map(|s| s.to_string()).collect();
107-
builder.set_searchable_fields(searchable_fields);
108-
109-
let faceted_fields = ["genre", "country", "artist"].iter().map(|s| s.to_string()).collect();
110-
builder.set_filterable_fields(faceted_fields);
111-
builder.execute(|_, _| ()).unwrap();
112-
wtxn.commit().unwrap();
113-
114-
let index_ref = &index;
115-
11688
let mut group = c.benchmark_group("indexing");
11789
group.sample_size(10);
11890
group.bench_function("Indexing songs without faceted numbers", |b| {
11991
b.iter_with_setup(
12092
move || {
93+
let index = setup_index();
94+
12195
let update_builder = UpdateBuilder::new(0);
122-
let mut wtxn = index_ref.write_txn().unwrap();
123-
let builder = update_builder.delete_documents(&mut wtxn, index_ref).unwrap();
124-
builder.execute().unwrap();
96+
let mut wtxn = index.write_txn().unwrap();
97+
let mut builder = update_builder.settings(&mut wtxn, &index);
98+
99+
builder.set_primary_key("id".to_owned());
100+
let displayed_fields =
101+
["title", "album", "artist", "genre", "country", "released", "duration"]
102+
.iter()
103+
.map(|s| s.to_string())
104+
.collect();
105+
builder.set_displayed_fields(displayed_fields);
106+
107+
let searchable_fields =
108+
["title", "album", "artist"].iter().map(|s| s.to_string()).collect();
109+
builder.set_searchable_fields(searchable_fields);
110+
111+
let faceted_fields =
112+
["genre", "country", "artist"].iter().map(|s| s.to_string()).collect();
113+
builder.set_filterable_fields(faceted_fields);
114+
builder.execute(|_, _| ()).unwrap();
125115
wtxn.commit().unwrap();
126-
()
116+
index
127117
},
128-
move |_| {
118+
move |index| {
129119
let update_builder = UpdateBuilder::new(0);
130-
let mut wtxn = index_ref.write_txn().unwrap();
131-
let mut builder = update_builder.index_documents(&mut wtxn, index_ref);
120+
let mut wtxn = index.write_txn().unwrap();
121+
let mut builder = update_builder.index_documents(&mut wtxn, &index);
132122

133123
builder.update_format(UpdateFormat::Csv);
134124
builder.index_documents_method(IndexDocumentsMethod::ReplaceDocuments);
@@ -138,49 +128,44 @@ fn indexing_songs_without_faceted_numbers(c: &mut Criterion) {
138128
));
139129
builder.execute(reader, |_, _| ()).unwrap();
140130
wtxn.commit().unwrap();
131+
132+
index.prepare_for_closing().wait();
141133
},
142134
)
143135
});
144-
index.prepare_for_closing().wait();
145136
}
146137

147138
fn indexing_songs_without_faceted_fields(c: &mut Criterion) {
148-
let index = setup_index();
149-
150-
let update_builder = UpdateBuilder::new(0);
151-
let mut wtxn = index.write_txn().unwrap();
152-
let mut builder = update_builder.settings(&mut wtxn, &index);
153-
154-
builder.set_primary_key("id".to_owned());
155-
let displayed_fields = ["title", "album", "artist", "genre", "country", "released", "duration"]
156-
.iter()
157-
.map(|s| s.to_string())
158-
.collect();
159-
builder.set_displayed_fields(displayed_fields);
160-
161-
let searchable_fields = ["title", "album", "artist"].iter().map(|s| s.to_string()).collect();
162-
builder.set_searchable_fields(searchable_fields);
163-
builder.execute(|_, _| ()).unwrap();
164-
wtxn.commit().unwrap();
165-
166-
let index_ref = &index;
167-
168139
let mut group = c.benchmark_group("indexing");
169140
group.sample_size(10);
170141
group.bench_function("Indexing songs without any facets", |b| {
171142
b.iter_with_setup(
172143
move || {
144+
let index = setup_index();
145+
173146
let update_builder = UpdateBuilder::new(0);
174-
let mut wtxn = index_ref.write_txn().unwrap();
175-
let builder = update_builder.delete_documents(&mut wtxn, index_ref).unwrap();
176-
builder.execute().unwrap();
147+
let mut wtxn = index.write_txn().unwrap();
148+
let mut builder = update_builder.settings(&mut wtxn, &index);
149+
150+
builder.set_primary_key("id".to_owned());
151+
let displayed_fields =
152+
["title", "album", "artist", "genre", "country", "released", "duration"]
153+
.iter()
154+
.map(|s| s.to_string())
155+
.collect();
156+
builder.set_displayed_fields(displayed_fields);
157+
158+
let searchable_fields =
159+
["title", "album", "artist"].iter().map(|s| s.to_string()).collect();
160+
builder.set_searchable_fields(searchable_fields);
161+
builder.execute(|_, _| ()).unwrap();
177162
wtxn.commit().unwrap();
178-
()
163+
index
179164
},
180-
move |_| {
165+
move |index| {
181166
let update_builder = UpdateBuilder::new(0);
182-
let mut wtxn = index_ref.write_txn().unwrap();
183-
let mut builder = update_builder.index_documents(&mut wtxn, index_ref);
167+
let mut wtxn = index.write_txn().unwrap();
168+
let mut builder = update_builder.index_documents(&mut wtxn, &index);
184169

185170
builder.update_format(UpdateFormat::Csv);
186171
builder.index_documents_method(IndexDocumentsMethod::ReplaceDocuments);
@@ -190,49 +175,43 @@ fn indexing_songs_without_faceted_fields(c: &mut Criterion) {
190175
));
191176
builder.execute(reader, |_, _| ()).unwrap();
192177
wtxn.commit().unwrap();
178+
179+
index.prepare_for_closing().wait();
193180
},
194181
)
195182
});
196-
index.prepare_for_closing().wait();
197183
}
198184

199185
fn indexing_wiki(c: &mut Criterion) {
200-
let index = setup_index();
201-
202-
let update_builder = UpdateBuilder::new(0);
203-
let mut wtxn = index.write_txn().unwrap();
204-
let mut builder = update_builder.settings(&mut wtxn, &index);
205-
206-
builder.set_primary_key("id".to_owned());
207-
let displayed_fields = ["title", "body", "url"].iter().map(|s| s.to_string()).collect();
208-
builder.set_displayed_fields(displayed_fields);
209-
210-
let searchable_fields = ["title", "body"].iter().map(|s| s.to_string()).collect();
211-
builder.set_searchable_fields(searchable_fields);
212-
213-
// there is NO faceted fields at all
214-
215-
builder.execute(|_, _| ()).unwrap();
216-
wtxn.commit().unwrap();
217-
218-
let index_ref = &index;
219-
220186
let mut group = c.benchmark_group("indexing");
221187
group.sample_size(10);
222188
group.bench_function("Indexing wiki", |b| {
223189
b.iter_with_setup(
224190
move || {
191+
let index = setup_index();
192+
225193
let update_builder = UpdateBuilder::new(0);
226-
let mut wtxn = index_ref.write_txn().unwrap();
227-
let builder = update_builder.delete_documents(&mut wtxn, index_ref).unwrap();
228-
builder.execute().unwrap();
194+
let mut wtxn = index.write_txn().unwrap();
195+
let mut builder = update_builder.settings(&mut wtxn, &index);
196+
197+
builder.set_primary_key("id".to_owned());
198+
let displayed_fields =
199+
["title", "body", "url"].iter().map(|s| s.to_string()).collect();
200+
builder.set_displayed_fields(displayed_fields);
201+
202+
let searchable_fields = ["title", "body"].iter().map(|s| s.to_string()).collect();
203+
builder.set_searchable_fields(searchable_fields);
204+
205+
// there is NO faceted fields at all
206+
207+
builder.execute(|_, _| ()).unwrap();
229208
wtxn.commit().unwrap();
230-
()
209+
index
231210
},
232-
move |_| {
211+
move |index| {
233212
let update_builder = UpdateBuilder::new(0);
234-
let mut wtxn = index_ref.write_txn().unwrap();
235-
let mut builder = update_builder.index_documents(&mut wtxn, index_ref);
213+
let mut wtxn = index.write_txn().unwrap();
214+
let mut builder = update_builder.index_documents(&mut wtxn, &index);
236215

237216
builder.update_format(UpdateFormat::Csv);
238217
builder.index_documents_method(IndexDocumentsMethod::ReplaceDocuments);
@@ -242,65 +221,60 @@ fn indexing_wiki(c: &mut Criterion) {
242221
));
243222
builder.execute(reader, |_, _| ()).unwrap();
244223
wtxn.commit().unwrap();
224+
225+
index.prepare_for_closing().wait();
245226
},
246227
)
247228
});
248-
index.prepare_for_closing().wait();
249229
}
250230

251231
fn indexing_movies_default(c: &mut Criterion) {
252-
let index = setup_index();
253-
254-
let update_builder = UpdateBuilder::new(0);
255-
let mut wtxn = index.write_txn().unwrap();
256-
let mut builder = update_builder.settings(&mut wtxn, &index);
257-
258-
builder.set_primary_key("id".to_owned());
259-
let displayed_fields = ["title", "poster", "overview", "release_date", "genres"]
260-
.iter()
261-
.map(|s| s.to_string())
262-
.collect();
263-
builder.set_displayed_fields(displayed_fields);
264-
265-
let searchable_fields = ["title", "overview"].iter().map(|s| s.to_string()).collect();
266-
builder.set_searchable_fields(searchable_fields);
267-
268-
let faceted_fields = ["released_date", "genres"].iter().map(|s| s.to_string()).collect();
269-
builder.set_filterable_fields(faceted_fields);
270-
271-
builder.execute(|_, _| ()).unwrap();
272-
wtxn.commit().unwrap();
273-
274-
let index_ref = &index;
275-
276232
let mut group = c.benchmark_group("indexing");
277233
group.sample_size(10);
278234
group.bench_function("Indexing movies with default settings", |b| {
279235
b.iter_with_setup(
280236
move || {
237+
let index = setup_index();
238+
281239
let update_builder = UpdateBuilder::new(0);
282-
let mut wtxn = index_ref.write_txn().unwrap();
283-
let builder = update_builder.delete_documents(&mut wtxn, index_ref).unwrap();
284-
builder.execute().unwrap();
240+
let mut wtxn = index.write_txn().unwrap();
241+
let mut builder = update_builder.settings(&mut wtxn, &index);
242+
243+
builder.set_primary_key("id".to_owned());
244+
let displayed_fields = ["title", "poster", "overview", "release_date", "genres"]
245+
.iter()
246+
.map(|s| s.to_string())
247+
.collect();
248+
builder.set_displayed_fields(displayed_fields);
249+
250+
let searchable_fields =
251+
["title", "overview"].iter().map(|s| s.to_string()).collect();
252+
builder.set_searchable_fields(searchable_fields);
253+
254+
let faceted_fields =
255+
["released_date", "genres"].iter().map(|s| s.to_string()).collect();
256+
builder.set_filterable_fields(faceted_fields);
257+
258+
builder.execute(|_, _| ()).unwrap();
285259
wtxn.commit().unwrap();
286-
()
260+
index
287261
},
288-
move |_| {
262+
move |index| {
289263
let update_builder = UpdateBuilder::new(0);
290-
let mut wtxn = index_ref.write_txn().unwrap();
291-
let mut builder = update_builder.index_documents(&mut wtxn, index_ref);
264+
let mut wtxn = index.write_txn().unwrap();
265+
let mut builder = update_builder.index_documents(&mut wtxn, &index);
292266

293267
builder.update_format(UpdateFormat::Json);
294268
builder.index_documents_method(IndexDocumentsMethod::ReplaceDocuments);
295269
let reader = File::open(datasets_paths::MOVIES)
296270
.expect(&format!("could not find the dataset in: {}", datasets_paths::MOVIES));
297271
builder.execute(reader, |_, _| ()).unwrap();
298272
wtxn.commit().unwrap();
273+
274+
index.prepare_for_closing().wait();
299275
},
300276
)
301277
});
302-
303-
index.prepare_for_closing().wait();
304278
}
305279

306280
criterion_group!(

0 commit comments

Comments
 (0)