Benchmark for serial inserts for comparison

This commit is contained in:
Simon Binder 2019-12-23 20:47:03 +01:00
parent 60f55c9224
commit d41097d8e5
No known key found for this signature in database
GPG Key ID: 7891917E4147B8C0
4 changed files with 40 additions and 2 deletions

View File

@ -18,6 +18,7 @@ List<Reportable> allBenchmarks(ScoreEmitter emitter) {
SelectStringBenchmark(emitter),
// high-level moor apis
KeyValueInsertBatch(emitter),
KeyValueInsertSerial(emitter),
// sql parser
ParseMoorFile(emitter),
TokenizerBenchmark(emitter),

View File

@ -1,5 +1,9 @@
import 'dart:io';
import 'package:moor/moor.dart';
import 'package:moor_ffi/moor_ffi.dart';
import 'package:path/path.dart' as p;
import 'package:uuid/uuid.dart';
part 'database.g.dart';
@ -13,8 +17,18 @@ class KeyValues extends Table {
@UseMoor(tables: [KeyValues])
class Database extends _$Database {
Database() : super(VmDatabase.memory());
Database() : super(_obtainExecutor());
@override
int get schemaVersion => 1;
}
final _uuid = Uuid();
QueryExecutor _obtainExecutor() {
final file =
File(p.join(Directory.systemTemp.path, 'moor_benchmarks', _uuid.v4()));
file.parent.createSync();
return VmDatabase(file);
}

View File

@ -13,7 +13,7 @@ class KeyValueInsertBatch extends AsyncBenchmarkBase {
final Uuid uuid = Uuid();
KeyValueInsertBatch(ScoreEmitter emitter)
: super('Inserting $_size entries', emitter);
: super('Inserting $_size entries (batch)', emitter);
@override
Future<void> run() async {
@ -30,3 +30,25 @@ class KeyValueInsertBatch extends AsyncBenchmarkBase {
});
}
}
class KeyValueInsertSerial extends AsyncBenchmarkBase {
final _db = Database();
final Uuid uuid = Uuid();
KeyValueInsertSerial(ScoreEmitter emitter)
: super('Inserting $_size entries (serial)', emitter);
@override
Future<void> run() async {
await _db.delete(_db.keyValues).go();
for (var i = 0; i < _size; i++) {
final key = uuid.v4();
final value = uuid.v4();
await _db
.into(_db.keyValues)
.insert(KeyValuesCompanion.insert(key: key, value: value));
}
}
}

View File

@ -7,6 +7,7 @@ dependencies:
benchmark_harness: ^1.0.5
intl: ^0.16.0
uuid: ^2.0.0
path: ^1.6.0
dev_dependencies:
moor_generator:
build_runner: