1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 | var loki = require('../src/lokijs.js');
|
17 | var lfsa = require('../src/loki-fs-structured-adapter.js');
|
18 | var adapter = new lfsa();
|
19 | var db;
|
20 | var start, end;
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 | var mode = "fs-structured-partitioned";
|
31 |
|
32 | var adapter;
|
33 |
|
34 | switch (mode) {
|
35 | case "fs-normal":
|
36 | case "fs-structured": adapter = new loki.LokiFsAdapter(); break;
|
37 | case "fs-partitioned": adapter = new loki.LokiPartitioningAdapter(new loki.LokiFsAdapter()); break;
|
38 | case "fs-structured-partitioned" : adapter = new lfsa(); break;
|
39 | default:adapter = new loki.LokiFsAdapter(); break;
|
40 | };
|
41 |
|
42 | console.log(mode);
|
43 |
|
44 | function reloadDatabase() {
|
45 | start = process.hrtime();
|
46 |
|
47 |
|
48 | db = new loki('sandbox.db', {
|
49 | verbose: true,
|
50 | autoload: true,
|
51 | autoloadCallback: dbLoaded,
|
52 | adapter:adapter
|
53 | });
|
54 | }
|
55 |
|
56 | function formatBytes(bytes,decimals) {
|
57 | if(bytes == 0) return '0 Byte';
|
58 | var k = 1000;
|
59 | var dm = decimals + 1 || 3;
|
60 | var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
|
61 | var i = Math.floor(Math.log(bytes) / Math.log(k));
|
62 | return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
|
63 | }
|
64 |
|
65 | function logMemoryUsage(msg) {
|
66 | var pmu = process.memoryUsage();
|
67 | console.log(msg + " > rss : " + formatBytes(pmu.rss) + " heapTotal : " + formatBytes(pmu.heapTotal) + " heapUsed : " + formatBytes(pmu.heapUsed));
|
68 | }
|
69 |
|
70 | function dbLoaded() {
|
71 | end = process.hrtime(start);
|
72 | console.info("database loaded... time : %ds %dms", end[0], end[1]/1000000);
|
73 | var doccount =0, cidx;
|
74 | db.collections.forEach(function(coll) {
|
75 | doccount += coll.data.length;
|
76 | })
|
77 |
|
78 | logMemoryUsage("After loading database : ");
|
79 | console.log('number of docs in items collection(s) : ' + doccount);
|
80 |
|
81 |
|
82 |
|
83 | }
|
84 |
|
85 | function dirtyCollAndSaveDatabase() {
|
86 | var start, end;
|
87 |
|
88 | start = process.hrtime();
|
89 |
|
90 |
|
91 | db.collections[0].insert({ a: 1, b : 2});
|
92 | db.saveDatabase(function(err) {
|
93 | if (err === null) {
|
94 | console.log('finished saving database');
|
95 | logMemoryUsage("after database save : ");
|
96 | end = process.hrtime(start);
|
97 | console.info("database save time : %ds %dms", end[0], end[1]/1000000);
|
98 | }
|
99 | else {
|
100 | console.log('error encountered saving database : ' + err);
|
101 | }
|
102 | });
|
103 | }
|
104 |
|
105 | logMemoryUsage("Before loading database : ");
|
106 | reloadDatabase();
|