-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathdb.js
72 lines (60 loc) · 1.58 KB
/
db.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
const lmdb = require('node-lmdb');
class LMDBManager {
constructor(path, mapSize, maxDbs) {
this.env = new lmdb.Env();
this.env.open({
path: path || "./db",
mapSize: mapSize || 2 * 1024 * 1024 * 1024, // 2 GB by default
maxDbs: maxDbs || 10
});
this.writeTxn = null;
}
openDb(dbName) {
this.dbi = this.env.openDbi({
name: dbName || "mydb",
create: true
});
}
closeDb() {
this.writeTxn.commit();
this.dbi.close();
}
closeEnv() {
this.env.close();
}
set(key, value) {
try {
if (!this.writeTxn) {
const txn = this.env.beginTxn();
this.writeTxn = txn;
}
this.writeTxn.putString(this.dbi, key, value);
console.log('wrote', key, value);
} catch (e) {
console.error("Not a valid key", key, value);
}
}
get(key) {
// const txn = this.env.beginTxn({ readOnly: true });
if (!this.writeTxn) {
const txn = this.env.beginTxn();
this.writeTxn = txn;
}
const value = this.writeTxn.getString(this.dbi, key);
return value;
}
}
module.exports = LMDBManager;
// Usage:
/*
const dbManager = new LMDBManager();
dbManager.openDb('mydb2');
console.time('SET')
for (let i = 0; i < 1000000; i++) {
dbManager.set(1, `Hello world! ${i}`);
}
console.timeEnd('SET')
console.log(dbManager.get(1)); // Output: Hello world!
dbManager.closeDb();
dbManager.closeEnv();
*/