Skip to content

zuvola/tiny_storage

Repository files navigation

tiny_storage

pub package

English, 日本語

tiny_storage is a simple key-value store based on JSON files. It is also a very small library, so it is easy for anyone to understand how it works.

Features

  • Key-Value Store
  • Output as JSON file
  • Fast
    • Parallel processing of file I/O using Isolate.
    • Multiple write operations are not executed in the same event loop.
  • Guaranteed write order, even for large data.

Getting started

import 'package:tiny_storage/tiny_storage.dart';

void main() async {
  final storage = await TinyStorage.init('test.txt', path: './tmp');
  storage.set('key_1', 'value_1');
  storage.set('key_2', 2);
  storage.set('key_3', [1, 2, 3]);
  final ret = storage.get('key_1');
  print(ret);
  await storage.dispose();
}

Usage

Initialize

Specify the file name to save and initialize. If the file exists, the loading process will run.
In the case of Flutter, it is also necessary to specify the destination path using path_provider.

final storage = await TinyStorage.init('test.txt', path: './tmp');

If you do not want to increase the number of threads when opening multiple files, specify a TinyStorage object to be shared in union. It will work on the same thread.

final storage = await TinyStorage.init('test1.txt', path: './tmp');
final storage2 = await TinyStorage.init('test2.txt', path: './tmp', union: storage);

Registration and Retrieval

Registers and retrieves an Object using String as a key.
The value is immediately held in memory and written to disk before the next event loop.

storage.set('key_1', 'value_1');
final ret = storage.get('key_1');

Clear

Discard all data and the file.

storage.clear();

Dispose

Use dispose to destroy it when it is no longer needed.

storage.dispose();

Note

The web version has not been implemented yet.

tiny_locator

Since tiny_storage runs the file reading process at the time of init, When using it in multiple classes, it is recommended to share the instance using tiny_locator etc.

Future<void> A() async {
  // Registration
  final storage = await TinyStorage.init('test.txt', path: './tmp');
  locator.add<TinyStorage>(() => storage);
}
void B() {
  // Acquisition
  final storage = locator.get<TinyStorage>();
  final ret = storage.get('key_1');
  print(ret);
}

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages