diff --git a/extras/benchmarks/lib/benchmarks.dart b/extras/benchmarks/lib/benchmarks.dart index 3fa1a1d5..707f248a 100644 --- a/extras/benchmarks/lib/benchmarks.dart +++ b/extras/benchmarks/lib/benchmarks.dart @@ -18,6 +18,7 @@ List allBenchmarks(ScoreEmitter emitter) { SelectStringBenchmark(emitter), // high-level moor apis KeyValueInsertBatch(emitter), + KeyValueInsertSerial(emitter), // sql parser ParseMoorFile(emitter), TokenizerBenchmark(emitter), diff --git a/extras/benchmarks/lib/src/moor/database.dart b/extras/benchmarks/lib/src/moor/database.dart index 7133b641..9638cfc0 100644 --- a/extras/benchmarks/lib/src/moor/database.dart +++ b/extras/benchmarks/lib/src/moor/database.dart @@ -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); +} diff --git a/extras/benchmarks/lib/src/moor/key_value_insert.dart b/extras/benchmarks/lib/src/moor/key_value_insert.dart index 854ffd9a..0cf87c9d 100644 --- a/extras/benchmarks/lib/src/moor/key_value_insert.dart +++ b/extras/benchmarks/lib/src/moor/key_value_insert.dart @@ -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 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 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)); + } + } +} diff --git a/extras/benchmarks/pubspec.yaml b/extras/benchmarks/pubspec.yaml index 20677180..514d636c 100644 --- a/extras/benchmarks/pubspec.yaml +++ b/extras/benchmarks/pubspec.yaml @@ -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: