[pygr-notify] [pygr commit] r123 - contrib/benchmark

codesite-noreply at google.com codesite-noreply at google.com
Wed Jan 7 06:26:05 PST 2009


Author: istvan.albert
Date: Wed Jan  7 06:25:51 2009
New Revision: 123

Added:
    contrib/benchmark/metakit_dict.py
Modified:
    contrib/benchmark/bench.py

Log:
added metakit based storage

Modified: contrib/benchmark/bench.py
==============================================================================
--- contrib/benchmark/bench.py	(original)
+++ contrib/benchmark/bench.py	Wed Jan  7 06:25:51 2009
@@ -3,9 +3,10 @@
  import sq_dict
  import sq_dict2
  import dbm_dict
+import metakit_dict

  # number of elements
-ELEM_NUM = 10**7
+ELEM_NUM = 10**5

  # data size
  DATA_SIZE = 100
@@ -94,15 +95,16 @@
      #
      import cdb_dict
      #
+    funcm = metakit_dict.metakit_open
      func0 = cdb_dict.cdb_open
-
+
      func1 = bsddb.btopen
      func2 = bsddb.hashopen
      func3 = sq_dict.sq_dict_open
      func4 = sq_dict2.sq_dict2_open
      func5 = dbm_dict.dbm_open

-    funcs = [ func0, func1, func2, func3, func4, func5 ]
+    funcs = [ funcm, func0, func1, func2, func3, func4, func5 ]
      tests = [ loading, indexing, forward_iter, reverse_iter, update]

      print

Added: contrib/benchmark/metakit_dict.py
==============================================================================
--- (empty file)
+++ contrib/benchmark/metakit_dict.py	Wed Jan  7 06:25:51 2009
@@ -0,0 +1,45 @@
+# metakit based dictionary
+
+import metakit
+
+def metakit_open(filename, mode='c'):
+    db = MetakitShelve(filename, mode=mode)
+    return db
+
+class MetakitShelve( object ):
+
+    def __init__ (self, filename, mode):
+        self.db = metakit.storage( filename, 1)
+        view = self.db.getas("data[key:S,value:S]")
+        hashvw = self.db.getas("__test_hash__[_H:I,_R:I]")
+        self.view = view.hash(hashvw, 1)
+
+    def create_index(self):
+        pass
+
+    def sync(self):
+        self.db.commit()
+
+    def close(self):
+        pass
+
+    def __setitem__(self, key, value):
+        self.view.append( (key, value))
+
+    def __getitem__(self, key):
+        return self.view.select(key=key)[0].value
+
+    def __iter__(self):
+        return iter( self.keys() )
+
+    def keys(self):
+        return [r.key for r in self.view]
+
+if __name__ == '__main__':
+    db = MetakitShelve('test.db', mode='c')
+    for i in range(1000):
+        db['1'] = '2'
+
+    print db['1']
+    for key in db:
+        print key



More information about the pygr-notify mailing list