Sample code for 30+ languages & platforms
Dart

Large Persistent Hash Table Stored on Filesystem

See more Misc Examples

Demonstrates how to implement a large, persistent hash table that is stored on the filesystem and allows for quick retrieval using a hash key.

Chilkat Dart Downloads

Dart
import 'package:chilkat/chilkat.dart';

void main() {
  // Let's say we would like to implement a persistent hash table with approximately 200,000 entries.
  // We want something simple and straightforward.
  // 
  // The Chilkat Cache class is a solution that might fit.
  // 
  // Each hash table entry is a file.  Depending on the number of anticipated hash entries,
  // the files can be contained in a single directory, or a collection of 256 directories,
  // or a collection of 256x256 directories.

  // There are 3 options:
  // 
  // Level 0: All cache files are in a single directory (the cache root).
  // Level 1: Cache files are located in 256 sub-directories numbered 0 .. 255 directly under the cache root.
  // Level 2: There are two levels of sub-directories under the cache root. 
  //          The 1st level has 256 sub-directories numbered 0 .. 255 directly under the cache root. 
  //          The 2nd level allows for up to 256 sub-directories (0..255) under each level-1 directory. 
  //          Cache files are stored in the leaf directories. 

  // For this example, given that we anticipate a larger number of hash entries, we choose a "level 2" cache.
  final cache = CkCache();

  // We can also spread the cache among several root directories, but for this example we'll only use one root directory.
  // Call AddRoot once for each root directory.
  cache.addRoot('c:/temp/myCache');
  cache.level = 2;

  // Add some key/values to the persisted hash table (i.e. the cache).
  // The eTag is optional metadata.
  var key = 'apple';
  final eTag = '';
  var itemValue = 'macos';
  cache.saveTextNoExpire(key, eTag, itemValue);

  // Add more items..
  cache.saveTextNoExpire('microsoft', '', 'windows');
  cache.saveTextNoExpire('google', '', 'android');

  // Lookup items:
  key = 'microsoft';
  itemValue = cache.fetchText(key);
  print('$key: $itemValue');

  key = 'apple';
  itemValue = cache.fetchText(key);
  print('$key: $itemValue');
}