Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Added LevelDB port, passes benchmark.js

  • Loading branch information...
commit d6f35f424d9ca37f36d8226f0210717de233a342 1 parent 7e6e62b
@ulikoehler ulikoehler authored
Showing with 99 additions and 0 deletions.
  1. +99 −0 leveldb_db.js
View
99 leveldb_db.js
@@ -0,0 +1,99 @@
+/**
+ * 2011 Peter 'Pita' Martischka
+ * 2012 Uli Koehler
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS-IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+try
+{
+ var leveldb = require("leveldb");
+}
+catch(e)
+{
+ console.error("FATAL: The leveldb dependency could not be loaded.");
+ process.exit(1);
+}
+
+var async = require("async");
+
+exports.database = function(settings)
+{
+ this.db=null;
+
+ if(!settings || !settings.directory)
+ {
+ settings = {directory:"leveldb-store"};
+ }
+
+ this.settings = settings;
+
+ //Set some LevelDB settings
+ //this.settings.cache = 1000;
+ //this.settings.writeInterval = 100;
+ //this.settings.json = true;
+}
+
+exports.database.prototype.init = function(callback) {
+ var _this = this;
+ async.waterfall([
+ function(callback) {
+ console.dir(_this.settings.directory);
+ leveldb.open(_this.settings.directory, { create_if_missing: true },
+ function(err, db) {
+ _this.db = db;
+ console.dir(db.put);
+ console.dir(err);
+ callback(err);
+ });
+ }
+ ],callback);
+}
+
+exports.database.prototype.get = function (key, callback)
+{
+ this.db.get(key, function(err, value) {
+ callback(err, value ? value : null);
+ });
+}
+
+exports.database.prototype.set = function (key, value, callback)
+{
+ this.db.put(key, value, callback);
+}
+
+exports.database.prototype.remove = function (key, callback)
+{
+ this.db.del(key, callback);
+}
+
+exports.database.prototype.doBulk = function (bulk, callback)
+{
+ //Batch not implemented
+ var batch = this.db.batch();
+ for(var i in bulk) {
+ if(bulk[i].type == "set") {
+ batch.put(bulk[i].key, bulk[i].value);
+ }
+ else if(bulk[i].type == "remove") {
+ batch.del(bulk[i].key);
+ }
+ }
+ this.db.write(batch, callback);
+}
+
+exports.database.prototype.close = function(callback)
+{
+ delete this.db;
+ callback(null)
+}
Please sign in to comment.
Something went wrong with that request. Please try again.