mirror of
https://github.com/meilisearch/meilisearch.git
synced 2024-11-27 12:35:05 +08:00
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>
This commit is contained in:
commit
794c0f64a9
@ -31,48 +31,43 @@ fn setup_index() -> Index {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn indexing_songs_default(c: &mut Criterion) {
|
fn indexing_songs_default(c: &mut Criterion) {
|
||||||
let index = setup_index();
|
|
||||||
|
|
||||||
let update_builder = UpdateBuilder::new(0);
|
|
||||||
let mut wtxn = index.write_txn().unwrap();
|
|
||||||
let mut builder = update_builder.settings(&mut wtxn, &index);
|
|
||||||
|
|
||||||
builder.set_primary_key("id".to_owned());
|
|
||||||
let displayed_fields = ["title", "album", "artist", "genre", "country", "released", "duration"]
|
|
||||||
.iter()
|
|
||||||
.map(|s| s.to_string())
|
|
||||||
.collect();
|
|
||||||
builder.set_displayed_fields(displayed_fields);
|
|
||||||
|
|
||||||
let searchable_fields = ["title", "album", "artist"].iter().map(|s| s.to_string()).collect();
|
|
||||||
builder.set_searchable_fields(searchable_fields);
|
|
||||||
|
|
||||||
let faceted_fields = ["released-timestamp", "duration-float", "genre", "country", "artist"]
|
|
||||||
.iter()
|
|
||||||
.map(|s| s.to_string())
|
|
||||||
.collect();
|
|
||||||
builder.set_filterable_fields(faceted_fields);
|
|
||||||
builder.execute(|_, _| ()).unwrap();
|
|
||||||
wtxn.commit().unwrap();
|
|
||||||
|
|
||||||
let index_ref = &index;
|
|
||||||
|
|
||||||
let mut group = c.benchmark_group("indexing");
|
let mut group = c.benchmark_group("indexing");
|
||||||
group.sample_size(10);
|
group.sample_size(10);
|
||||||
group.bench_function("Indexing songs with default settings", |b| {
|
group.bench_function("Indexing songs with default settings", |b| {
|
||||||
b.iter_with_setup(
|
b.iter_with_setup(
|
||||||
move || {
|
move || {
|
||||||
|
let index = setup_index();
|
||||||
|
|
||||||
let update_builder = UpdateBuilder::new(0);
|
let update_builder = UpdateBuilder::new(0);
|
||||||
let mut wtxn = index_ref.write_txn().unwrap();
|
let mut wtxn = index.write_txn().unwrap();
|
||||||
let builder = update_builder.delete_documents(&mut wtxn, index_ref).unwrap();
|
let mut builder = update_builder.settings(&mut wtxn, &index);
|
||||||
builder.execute().unwrap();
|
|
||||||
|
builder.set_primary_key("id".to_owned());
|
||||||
|
let displayed_fields =
|
||||||
|
["title", "album", "artist", "genre", "country", "released", "duration"]
|
||||||
|
.iter()
|
||||||
|
.map(|s| s.to_string())
|
||||||
|
.collect();
|
||||||
|
builder.set_displayed_fields(displayed_fields);
|
||||||
|
|
||||||
|
let searchable_fields =
|
||||||
|
["title", "album", "artist"].iter().map(|s| s.to_string()).collect();
|
||||||
|
builder.set_searchable_fields(searchable_fields);
|
||||||
|
|
||||||
|
let faceted_fields =
|
||||||
|
["released-timestamp", "duration-float", "genre", "country", "artist"]
|
||||||
|
.iter()
|
||||||
|
.map(|s| s.to_string())
|
||||||
|
.collect();
|
||||||
|
builder.set_filterable_fields(faceted_fields);
|
||||||
|
builder.execute(|_, _| ()).unwrap();
|
||||||
wtxn.commit().unwrap();
|
wtxn.commit().unwrap();
|
||||||
()
|
index
|
||||||
},
|
},
|
||||||
move |_| {
|
move |index| {
|
||||||
let update_builder = UpdateBuilder::new(0);
|
let update_builder = UpdateBuilder::new(0);
|
||||||
let mut wtxn = index_ref.write_txn().unwrap();
|
let mut wtxn = index.write_txn().unwrap();
|
||||||
let mut builder = update_builder.index_documents(&mut wtxn, index_ref);
|
let mut builder = update_builder.index_documents(&mut wtxn, &index);
|
||||||
|
|
||||||
builder.update_format(UpdateFormat::Csv);
|
builder.update_format(UpdateFormat::Csv);
|
||||||
builder.index_documents_method(IndexDocumentsMethod::ReplaceDocuments);
|
builder.index_documents_method(IndexDocumentsMethod::ReplaceDocuments);
|
||||||
@ -82,69 +77,19 @@ fn indexing_songs_default(c: &mut Criterion) {
|
|||||||
));
|
));
|
||||||
builder.execute(reader, |_, _| ()).unwrap();
|
builder.execute(reader, |_, _| ()).unwrap();
|
||||||
wtxn.commit().unwrap();
|
wtxn.commit().unwrap();
|
||||||
|
|
||||||
|
index.prepare_for_closing().wait();
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
});
|
});
|
||||||
|
|
||||||
index.prepare_for_closing().wait();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn indexing_songs_without_faceted_numbers(c: &mut Criterion) {
|
fn indexing_songs_without_faceted_numbers(c: &mut Criterion) {
|
||||||
let index = setup_index();
|
|
||||||
|
|
||||||
let update_builder = UpdateBuilder::new(0);
|
|
||||||
let mut wtxn = index.write_txn().unwrap();
|
|
||||||
let mut builder = update_builder.settings(&mut wtxn, &index);
|
|
||||||
|
|
||||||
builder.set_primary_key("id".to_owned());
|
|
||||||
let displayed_fields = ["title", "album", "artist", "genre", "country", "released", "duration"]
|
|
||||||
.iter()
|
|
||||||
.map(|s| s.to_string())
|
|
||||||
.collect();
|
|
||||||
builder.set_displayed_fields(displayed_fields);
|
|
||||||
|
|
||||||
let searchable_fields = ["title", "album", "artist"].iter().map(|s| s.to_string()).collect();
|
|
||||||
builder.set_searchable_fields(searchable_fields);
|
|
||||||
|
|
||||||
let faceted_fields = ["genre", "country", "artist"].iter().map(|s| s.to_string()).collect();
|
|
||||||
builder.set_filterable_fields(faceted_fields);
|
|
||||||
builder.execute(|_, _| ()).unwrap();
|
|
||||||
wtxn.commit().unwrap();
|
|
||||||
|
|
||||||
let index_ref = &index;
|
|
||||||
|
|
||||||
let mut group = c.benchmark_group("indexing");
|
let mut group = c.benchmark_group("indexing");
|
||||||
group.sample_size(10);
|
group.sample_size(10);
|
||||||
group.bench_function("Indexing songs without faceted numbers", |b| {
|
group.bench_function("Indexing songs without faceted numbers", |b| {
|
||||||
b.iter_with_setup(
|
b.iter_with_setup(
|
||||||
move || {
|
move || {
|
||||||
let update_builder = UpdateBuilder::new(0);
|
|
||||||
let mut wtxn = index_ref.write_txn().unwrap();
|
|
||||||
let builder = update_builder.delete_documents(&mut wtxn, index_ref).unwrap();
|
|
||||||
builder.execute().unwrap();
|
|
||||||
wtxn.commit().unwrap();
|
|
||||||
()
|
|
||||||
},
|
|
||||||
move |_| {
|
|
||||||
let update_builder = UpdateBuilder::new(0);
|
|
||||||
let mut wtxn = index_ref.write_txn().unwrap();
|
|
||||||
let mut builder = update_builder.index_documents(&mut wtxn, index_ref);
|
|
||||||
|
|
||||||
builder.update_format(UpdateFormat::Csv);
|
|
||||||
builder.index_documents_method(IndexDocumentsMethod::ReplaceDocuments);
|
|
||||||
let reader = File::open(datasets_paths::SMOL_SONGS).expect(&format!(
|
|
||||||
"could not find the dataset in: {}",
|
|
||||||
datasets_paths::SMOL_SONGS
|
|
||||||
));
|
|
||||||
builder.execute(reader, |_, _| ()).unwrap();
|
|
||||||
wtxn.commit().unwrap();
|
|
||||||
},
|
|
||||||
)
|
|
||||||
});
|
|
||||||
index.prepare_for_closing().wait();
|
|
||||||
}
|
|
||||||
|
|
||||||
fn indexing_songs_without_faceted_fields(c: &mut Criterion) {
|
|
||||||
let index = setup_index();
|
let index = setup_index();
|
||||||
|
|
||||||
let update_builder = UpdateBuilder::new(0);
|
let update_builder = UpdateBuilder::new(0);
|
||||||
@ -152,35 +97,28 @@ fn indexing_songs_without_faceted_fields(c: &mut Criterion) {
|
|||||||
let mut builder = update_builder.settings(&mut wtxn, &index);
|
let mut builder = update_builder.settings(&mut wtxn, &index);
|
||||||
|
|
||||||
builder.set_primary_key("id".to_owned());
|
builder.set_primary_key("id".to_owned());
|
||||||
let displayed_fields = ["title", "album", "artist", "genre", "country", "released", "duration"]
|
let displayed_fields =
|
||||||
|
["title", "album", "artist", "genre", "country", "released", "duration"]
|
||||||
.iter()
|
.iter()
|
||||||
.map(|s| s.to_string())
|
.map(|s| s.to_string())
|
||||||
.collect();
|
.collect();
|
||||||
builder.set_displayed_fields(displayed_fields);
|
builder.set_displayed_fields(displayed_fields);
|
||||||
|
|
||||||
let searchable_fields = ["title", "album", "artist"].iter().map(|s| s.to_string()).collect();
|
let searchable_fields =
|
||||||
|
["title", "album", "artist"].iter().map(|s| s.to_string()).collect();
|
||||||
builder.set_searchable_fields(searchable_fields);
|
builder.set_searchable_fields(searchable_fields);
|
||||||
|
|
||||||
|
let faceted_fields =
|
||||||
|
["genre", "country", "artist"].iter().map(|s| s.to_string()).collect();
|
||||||
|
builder.set_filterable_fields(faceted_fields);
|
||||||
builder.execute(|_, _| ()).unwrap();
|
builder.execute(|_, _| ()).unwrap();
|
||||||
wtxn.commit().unwrap();
|
wtxn.commit().unwrap();
|
||||||
|
index
|
||||||
let index_ref = &index;
|
|
||||||
|
|
||||||
let mut group = c.benchmark_group("indexing");
|
|
||||||
group.sample_size(10);
|
|
||||||
group.bench_function("Indexing songs without any facets", |b| {
|
|
||||||
b.iter_with_setup(
|
|
||||||
move || {
|
|
||||||
let update_builder = UpdateBuilder::new(0);
|
|
||||||
let mut wtxn = index_ref.write_txn().unwrap();
|
|
||||||
let builder = update_builder.delete_documents(&mut wtxn, index_ref).unwrap();
|
|
||||||
builder.execute().unwrap();
|
|
||||||
wtxn.commit().unwrap();
|
|
||||||
()
|
|
||||||
},
|
},
|
||||||
move |_| {
|
move |index| {
|
||||||
let update_builder = UpdateBuilder::new(0);
|
let update_builder = UpdateBuilder::new(0);
|
||||||
let mut wtxn = index_ref.write_txn().unwrap();
|
let mut wtxn = index.write_txn().unwrap();
|
||||||
let mut builder = update_builder.index_documents(&mut wtxn, index_ref);
|
let mut builder = update_builder.index_documents(&mut wtxn, &index);
|
||||||
|
|
||||||
builder.update_format(UpdateFormat::Csv);
|
builder.update_format(UpdateFormat::Csv);
|
||||||
builder.index_documents_method(IndexDocumentsMethod::ReplaceDocuments);
|
builder.index_documents_method(IndexDocumentsMethod::ReplaceDocuments);
|
||||||
@ -190,13 +128,19 @@ fn indexing_songs_without_faceted_fields(c: &mut Criterion) {
|
|||||||
));
|
));
|
||||||
builder.execute(reader, |_, _| ()).unwrap();
|
builder.execute(reader, |_, _| ()).unwrap();
|
||||||
wtxn.commit().unwrap();
|
wtxn.commit().unwrap();
|
||||||
|
|
||||||
|
index.prepare_for_closing().wait();
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
});
|
});
|
||||||
index.prepare_for_closing().wait();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn indexing_wiki(c: &mut Criterion) {
|
fn indexing_songs_without_faceted_fields(c: &mut Criterion) {
|
||||||
|
let mut group = c.benchmark_group("indexing");
|
||||||
|
group.sample_size(10);
|
||||||
|
group.bench_function("Indexing songs without any facets", |b| {
|
||||||
|
b.iter_with_setup(
|
||||||
|
move || {
|
||||||
let index = setup_index();
|
let index = setup_index();
|
||||||
|
|
||||||
let update_builder = UpdateBuilder::new(0);
|
let update_builder = UpdateBuilder::new(0);
|
||||||
@ -204,7 +148,55 @@ fn indexing_wiki(c: &mut Criterion) {
|
|||||||
let mut builder = update_builder.settings(&mut wtxn, &index);
|
let mut builder = update_builder.settings(&mut wtxn, &index);
|
||||||
|
|
||||||
builder.set_primary_key("id".to_owned());
|
builder.set_primary_key("id".to_owned());
|
||||||
let displayed_fields = ["title", "body", "url"].iter().map(|s| s.to_string()).collect();
|
let displayed_fields =
|
||||||
|
["title", "album", "artist", "genre", "country", "released", "duration"]
|
||||||
|
.iter()
|
||||||
|
.map(|s| s.to_string())
|
||||||
|
.collect();
|
||||||
|
builder.set_displayed_fields(displayed_fields);
|
||||||
|
|
||||||
|
let searchable_fields =
|
||||||
|
["title", "album", "artist"].iter().map(|s| s.to_string()).collect();
|
||||||
|
builder.set_searchable_fields(searchable_fields);
|
||||||
|
builder.execute(|_, _| ()).unwrap();
|
||||||
|
wtxn.commit().unwrap();
|
||||||
|
index
|
||||||
|
},
|
||||||
|
move |index| {
|
||||||
|
let update_builder = UpdateBuilder::new(0);
|
||||||
|
let mut wtxn = index.write_txn().unwrap();
|
||||||
|
let mut builder = update_builder.index_documents(&mut wtxn, &index);
|
||||||
|
|
||||||
|
builder.update_format(UpdateFormat::Csv);
|
||||||
|
builder.index_documents_method(IndexDocumentsMethod::ReplaceDocuments);
|
||||||
|
let reader = File::open(datasets_paths::SMOL_SONGS).expect(&format!(
|
||||||
|
"could not find the dataset in: {}",
|
||||||
|
datasets_paths::SMOL_SONGS
|
||||||
|
));
|
||||||
|
builder.execute(reader, |_, _| ()).unwrap();
|
||||||
|
wtxn.commit().unwrap();
|
||||||
|
|
||||||
|
index.prepare_for_closing().wait();
|
||||||
|
},
|
||||||
|
)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
fn indexing_wiki(c: &mut Criterion) {
|
||||||
|
let mut group = c.benchmark_group("indexing");
|
||||||
|
group.sample_size(10);
|
||||||
|
group.bench_function("Indexing wiki", |b| {
|
||||||
|
b.iter_with_setup(
|
||||||
|
move || {
|
||||||
|
let index = setup_index();
|
||||||
|
|
||||||
|
let update_builder = UpdateBuilder::new(0);
|
||||||
|
let mut wtxn = index.write_txn().unwrap();
|
||||||
|
let mut builder = update_builder.settings(&mut wtxn, &index);
|
||||||
|
|
||||||
|
builder.set_primary_key("id".to_owned());
|
||||||
|
let displayed_fields =
|
||||||
|
["title", "body", "url"].iter().map(|s| s.to_string()).collect();
|
||||||
builder.set_displayed_fields(displayed_fields);
|
builder.set_displayed_fields(displayed_fields);
|
||||||
|
|
||||||
let searchable_fields = ["title", "body"].iter().map(|s| s.to_string()).collect();
|
let searchable_fields = ["title", "body"].iter().map(|s| s.to_string()).collect();
|
||||||
@ -214,25 +206,12 @@ fn indexing_wiki(c: &mut Criterion) {
|
|||||||
|
|
||||||
builder.execute(|_, _| ()).unwrap();
|
builder.execute(|_, _| ()).unwrap();
|
||||||
wtxn.commit().unwrap();
|
wtxn.commit().unwrap();
|
||||||
|
index
|
||||||
let index_ref = &index;
|
|
||||||
|
|
||||||
let mut group = c.benchmark_group("indexing");
|
|
||||||
group.sample_size(10);
|
|
||||||
group.bench_function("Indexing wiki", |b| {
|
|
||||||
b.iter_with_setup(
|
|
||||||
move || {
|
|
||||||
let update_builder = UpdateBuilder::new(0);
|
|
||||||
let mut wtxn = index_ref.write_txn().unwrap();
|
|
||||||
let builder = update_builder.delete_documents(&mut wtxn, index_ref).unwrap();
|
|
||||||
builder.execute().unwrap();
|
|
||||||
wtxn.commit().unwrap();
|
|
||||||
()
|
|
||||||
},
|
},
|
||||||
move |_| {
|
move |index| {
|
||||||
let update_builder = UpdateBuilder::new(0);
|
let update_builder = UpdateBuilder::new(0);
|
||||||
let mut wtxn = index_ref.write_txn().unwrap();
|
let mut wtxn = index.write_txn().unwrap();
|
||||||
let mut builder = update_builder.index_documents(&mut wtxn, index_ref);
|
let mut builder = update_builder.index_documents(&mut wtxn, &index);
|
||||||
|
|
||||||
builder.update_format(UpdateFormat::Csv);
|
builder.update_format(UpdateFormat::Csv);
|
||||||
builder.index_documents_method(IndexDocumentsMethod::ReplaceDocuments);
|
builder.index_documents_method(IndexDocumentsMethod::ReplaceDocuments);
|
||||||
@ -242,13 +221,19 @@ fn indexing_wiki(c: &mut Criterion) {
|
|||||||
));
|
));
|
||||||
builder.execute(reader, |_, _| ()).unwrap();
|
builder.execute(reader, |_, _| ()).unwrap();
|
||||||
wtxn.commit().unwrap();
|
wtxn.commit().unwrap();
|
||||||
|
|
||||||
|
index.prepare_for_closing().wait();
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
});
|
});
|
||||||
index.prepare_for_closing().wait();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn indexing_movies_default(c: &mut Criterion) {
|
fn indexing_movies_default(c: &mut Criterion) {
|
||||||
|
let mut group = c.benchmark_group("indexing");
|
||||||
|
group.sample_size(10);
|
||||||
|
group.bench_function("Indexing movies with default settings", |b| {
|
||||||
|
b.iter_with_setup(
|
||||||
|
move || {
|
||||||
let index = setup_index();
|
let index = setup_index();
|
||||||
|
|
||||||
let update_builder = UpdateBuilder::new(0);
|
let update_builder = UpdateBuilder::new(0);
|
||||||
@ -262,33 +247,22 @@ fn indexing_movies_default(c: &mut Criterion) {
|
|||||||
.collect();
|
.collect();
|
||||||
builder.set_displayed_fields(displayed_fields);
|
builder.set_displayed_fields(displayed_fields);
|
||||||
|
|
||||||
let searchable_fields = ["title", "overview"].iter().map(|s| s.to_string()).collect();
|
let searchable_fields =
|
||||||
|
["title", "overview"].iter().map(|s| s.to_string()).collect();
|
||||||
builder.set_searchable_fields(searchable_fields);
|
builder.set_searchable_fields(searchable_fields);
|
||||||
|
|
||||||
let faceted_fields = ["released_date", "genres"].iter().map(|s| s.to_string()).collect();
|
let faceted_fields =
|
||||||
|
["released_date", "genres"].iter().map(|s| s.to_string()).collect();
|
||||||
builder.set_filterable_fields(faceted_fields);
|
builder.set_filterable_fields(faceted_fields);
|
||||||
|
|
||||||
builder.execute(|_, _| ()).unwrap();
|
builder.execute(|_, _| ()).unwrap();
|
||||||
wtxn.commit().unwrap();
|
wtxn.commit().unwrap();
|
||||||
|
index
|
||||||
let index_ref = &index;
|
|
||||||
|
|
||||||
let mut group = c.benchmark_group("indexing");
|
|
||||||
group.sample_size(10);
|
|
||||||
group.bench_function("Indexing movies with default settings", |b| {
|
|
||||||
b.iter_with_setup(
|
|
||||||
move || {
|
|
||||||
let update_builder = UpdateBuilder::new(0);
|
|
||||||
let mut wtxn = index_ref.write_txn().unwrap();
|
|
||||||
let builder = update_builder.delete_documents(&mut wtxn, index_ref).unwrap();
|
|
||||||
builder.execute().unwrap();
|
|
||||||
wtxn.commit().unwrap();
|
|
||||||
()
|
|
||||||
},
|
},
|
||||||
move |_| {
|
move |index| {
|
||||||
let update_builder = UpdateBuilder::new(0);
|
let update_builder = UpdateBuilder::new(0);
|
||||||
let mut wtxn = index_ref.write_txn().unwrap();
|
let mut wtxn = index.write_txn().unwrap();
|
||||||
let mut builder = update_builder.index_documents(&mut wtxn, index_ref);
|
let mut builder = update_builder.index_documents(&mut wtxn, &index);
|
||||||
|
|
||||||
builder.update_format(UpdateFormat::Json);
|
builder.update_format(UpdateFormat::Json);
|
||||||
builder.index_documents_method(IndexDocumentsMethod::ReplaceDocuments);
|
builder.index_documents_method(IndexDocumentsMethod::ReplaceDocuments);
|
||||||
@ -296,11 +270,11 @@ fn indexing_movies_default(c: &mut Criterion) {
|
|||||||
.expect(&format!("could not find the dataset in: {}", datasets_paths::MOVIES));
|
.expect(&format!("could not find the dataset in: {}", datasets_paths::MOVIES));
|
||||||
builder.execute(reader, |_, _| ()).unwrap();
|
builder.execute(reader, |_, _| ()).unwrap();
|
||||||
wtxn.commit().unwrap();
|
wtxn.commit().unwrap();
|
||||||
|
|
||||||
|
index.prepare_for_closing().wait();
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
});
|
});
|
||||||
|
|
||||||
index.prepare_for_closing().wait();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
criterion_group!(
|
criterion_group!(
|
||||||
|
Loading…
Reference in New Issue
Block a user