public Logic(LmdbArchiveStage <T> stage) : base(stage.Shape) { this.env = stage.lmdbEnvFactory(); this.inlet = stage.Inlet; this.outlet = stage.Outlet; this.db = env.OpenDatabase(stage.databaseName, new DatabaseConfig(DbFlags.None)); SetHandler(inlet, this); SetHandler(outlet, this); }
/// <summary> /// Creates a new /// </summary> /// <param name="directory">directory where the data and snapshots kept</param> /// <param name="mapSize">Default is 100 MB</param> public LmdbPersister(string directory, long mapSize = 100 * 1024 * 1024, Guid?seedId = null) { _directory = directory; if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } _env = LMDBEnvironment.Create(directory, disableAsync: true); _env.MapSize = mapSize; _env.Open(); _snapMgr = new SnapshotManager(_directory); _logDb = _env.OpenDatabase(Databases.Log, new DatabaseConfig(DbFlags.Create | DbFlags.DuplicatesSort) { DupSortPrefix = 64 }); _stateDb = _env.OpenDatabase(Databases.State, new DatabaseConfig(DbFlags.Create)); LoadState(seedId); }
private DatabaseContext(string pathToDatabase, long mapSize, bool unsafeAsync, int hashTablesCount) { HashTablesCount = hashTablesCount; // Check if current process is 64 bit one (needed for lmdb to run) if (!Environment.Is64BitProcess) { throw new BadRuntimeException(); } var lmdbOpenFlags = LMDBEnvironmentFlags.NoMemInit; if (unsafeAsync) { lmdbOpenFlags = lmdbOpenFlags | LMDBEnvironmentFlags.MapAsync | LMDBEnvironmentFlags.NoLock | LMDBEnvironmentFlags.WriteMap; } environment = LMDBEnvironment.Create(pathToDatabase, lmdbOpenFlags, disableAsync: true); environment.MapSize = mapSize; environment.MaxDatabases = HashTablesCount + 5; environment.MaxReaders = 1000; environment.Open(); // Open all database to make sure they exists and to hold their handles var configuration = new DatabaseConfig(DbFlags.Create | DbFlags.IntegerKey); var tracksDatabase = environment.OpenDatabase("tracks", configuration); var subFingerprintsDatabase = environment.OpenDatabase("subFingerprints", configuration); var hashTables = new Database[hashTablesCount]; var hashTableConfig = new DatabaseConfig( DbFlags.Create | DbFlags.DuplicatesSort | DbFlags.IntegerKey | DbFlags.IntegerDuplicates ); for (var i = 0; i < hashTablesCount; i++) { hashTables[i] = environment.OpenDatabase($"HashTable{i}", hashTableConfig); } databasesHolder = new DatabasesHolder(tracksDatabase, subFingerprintsDatabase, hashTables); // Open all databases for indexes var isrcIndex = environment.OpenDatabase("isrcIndex", new DatabaseConfig(DbFlags.Create)); var titleArtistIndex = environment.OpenDatabase("titleArtistIndex", new DatabaseConfig(DbFlags.Create | DbFlags.DuplicatesSort)); var tracksSubfingerprintsIndex = environment.OpenDatabase("tracksSubfingerprintsIndex", new DatabaseConfig( DbFlags.Create | DbFlags.DuplicatesSort | DbFlags.IntegerKey | DbFlags.IntegerDuplicates )); indexesHolder = new IndexesHolder(isrcIndex, titleArtistIndex, tracksSubfingerprintsIndex); }
public void CanSaveAndReadString() { string key = "jam!"; string value = "jim!"; using (var db = _env.OpenDatabase(DatabaseName, new DatabaseConfig(DbFlags.Create))) { using (var tx = _env.BeginTransaction()) { tx.Put(db, key, value); tx.Commit(); } using (var tx = _env.BeginReadOnlyTransaction()) { Bufferable b = default; var success = tx.TryGet(db, key, out b); Assert.True(success); Assert.Equal(value, b); } } }