Skip to content

Commit

Permalink
Benchmark Isar
Browse files Browse the repository at this point in the history
  • Loading branch information
vishnukvmd committed Jan 25, 2024
1 parent c744c21 commit 4dedd63
Show file tree
Hide file tree
Showing 14 changed files with 801 additions and 10 deletions.
16 changes: 16 additions & 0 deletions ios/Podfile.lock
Expand Up @@ -3,6 +3,12 @@ PODS:
- FMDB (2.7.5):
- FMDB/standard (= 2.7.5)
- FMDB/standard (2.7.5)
- isar_flutter_libs (1.0.0):
- Flutter
- ObjectBox (1.9.1)
- objectbox_flutter_libs (0.0.1):
- Flutter
- ObjectBox (= 1.9.1)
- path_provider_foundation (0.0.1):
- Flutter
- FlutterMacOS
Expand All @@ -12,16 +18,23 @@ PODS:

DEPENDENCIES:
- Flutter (from `Flutter`)
- isar_flutter_libs (from `.symlinks/plugins/isar_flutter_libs/ios`)
- objectbox_flutter_libs (from `.symlinks/plugins/objectbox_flutter_libs/ios`)
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
- sqflite (from `.symlinks/plugins/sqflite/ios`)

SPEC REPOS:
trunk:
- FMDB
- ObjectBox

EXTERNAL SOURCES:
Flutter:
:path: Flutter
isar_flutter_libs:
:path: ".symlinks/plugins/isar_flutter_libs/ios"
objectbox_flutter_libs:
:path: ".symlinks/plugins/objectbox_flutter_libs/ios"
path_provider_foundation:
:path: ".symlinks/plugins/path_provider_foundation/darwin"
sqflite:
Expand All @@ -30,6 +43,9 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
isar_flutter_libs: b69f437aeab9c521821c3f376198c4371fa21073
ObjectBox: 178bbc475aea8183870993c71e7341f3c95c7b8c
objectbox_flutter_libs: 612b49aaaef0974006a854d1abe3c687be1efefd
path_provider_foundation: 3784922295ac71e43754bd15e0653ccfd36a147c
sqflite: 50a33e1d72bd59ee092a519a35d107502757ebed

Expand Down
44 changes: 44 additions & 0 deletions lib/databases/isar_db.dart
@@ -0,0 +1,44 @@
import 'dart:io';

import 'package:edge_db_benchmarks/models/embedding.dart';
import 'package:isar/isar.dart';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';

class IsarDB {
late final Isar _isar;

IsarDB._privateConstructor();

static final IsarDB instance = IsarDB._privateConstructor();

Future<void> init() async {
final docsDir = await getApplicationDocumentsDirectory();
final path = join(docsDir.path, "embeddings.isar.db");
final directory = Directory(path);
if (await directory.exists()) {
await directory.delete(recursive: true);
}
await directory.create(recursive: true);
_isar = await Isar.open(
[EmbeddingSchema],
directory: path,
);
}

Future<void> put(Embedding embedding) {
return _isar.writeTxn(() async {
await _isar.embeddings.put(embedding);
});
}

Future<void> putMany(List<Embedding> embeddings) {
return _isar.writeTxn(() async {
await _isar.embeddings.putAll(embeddings);
});
}

Future<List<Embedding>> embeddings() {
return _isar.embeddings.filter().embeddingIsNotEmpty().findAll();
}
}
18 changes: 18 additions & 0 deletions lib/main.dart
@@ -1,6 +1,7 @@
import 'dart:math';
import 'dart:developer' as dev;

import 'package:edge_db_benchmarks/databases/isar_db.dart';
import 'package:edge_db_benchmarks/databases/object_box_db.dart';
import 'package:edge_db_benchmarks/databases/sqlite_db.dart';
import 'package:edge_db_benchmarks/models/embedding.dart';
Expand All @@ -14,6 +15,8 @@ void main() async {
embeddings.add(Embedding(embedding: getRandom512DoubleList()));
}
await benchmarkSqlite(embeddings);
await benchmarkObjectBox(embeddings);
await benchmarkIsar(embeddings);
}

const count = 100000;
Expand Down Expand Up @@ -48,6 +51,21 @@ Future<void> benchmarkObjectBox(List<Embedding> embeddings) async {
'ObjectBox: ${response.length} embeddings retrieved in ${stopwatch.elapsedMilliseconds} ms');
}

Future<void> benchmarkIsar(List<Embedding> embeddings) async {
await IsarDB.instance.init();
final stopwatch = Stopwatch()..start();
await IsarDB.instance.putMany(embeddings);
stopwatch.stop();
dev.log(
'Isar: $count embeddings inserted in ${stopwatch.elapsedMilliseconds} ms');
stopwatch.reset();
stopwatch.start();
final response = await IsarDB.instance.embeddings();
stopwatch.stop();
dev.log(
'Isar: ${response.length} embeddings retrieved in ${stopwatch.elapsedMilliseconds} ms');
}

List<double> getRandom512DoubleList() {
final random = Random();
final list = <double>[];
Expand Down
5 changes: 5 additions & 0 deletions lib/models/embedding.dart
@@ -1,12 +1,17 @@
import 'dart:convert';

import 'package:flutter/foundation.dart';
import 'package:isar/isar.dart';
import 'package:objectbox/objectbox.dart' as ob;

part 'embedding.g.dart';

@ob.Entity()
@collection
class Embedding {
@ob.Id(assignable: true)
int id = 0;
Id isarID = Isar.autoIncrement;

List<double> embedding;
Embedding({
Expand Down

0 comments on commit 4dedd63

Please sign in to comment.