Rev 4506: Implement LeafNode.items() rather than going directly to .keys. in http://bazaar.launchpad.net/~jameinel/bzr/1.17-btree-faster
John Arbash Meinel
john at arbash-meinel.com
Wed Jul 1 23:17:49 BST 2009
At http://bazaar.launchpad.net/~jameinel/bzr/1.17-btree-faster
------------------------------------------------------------
revno: 4506
revision-id: john at arbash-meinel.com-20090701221739-6mw9ibe9kqozg795
parent: john at arbash-meinel.com-20090701221254-5d901cn8py29zdes
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: 1.17-btree-faster
timestamp: Wed 2009-07-01 17:17:39 -0500
message:
Implement LeafNode.items() rather than going directly to .keys.
At this point 'timeit' shows that a partial parse gives 28ms down from 49ms.
So an approx savings of 2x.
-------------- next part --------------
=== modified file 'bzrlib/_btree_serializer_py.py'
--- a/bzrlib/_btree_serializer_py.py 2009-07-01 20:50:37 +0000
+++ b/bzrlib/_btree_serializer_py.py 2009-07-01 22:17:39 +0000
@@ -31,6 +31,9 @@
def __len__(self):
return len(self.keys)
+ def items(self):
+ return self.keys.items()
+
def get(self, key):
"""Get the value, refs or None for a given key."""
return self.keys.get(key, None)
=== modified file 'bzrlib/_btree_serializer_pyx.pyx'
--- a/bzrlib/_btree_serializer_pyx.pyx 2009-07-01 22:12:54 +0000
+++ b/bzrlib/_btree_serializer_pyx.pyx 2009-07-01 22:17:39 +0000
@@ -437,6 +437,7 @@
# self._ref_list_length))
# if keys1 != keys:
# raise ValueError('%s != %s')
+ print 'bad mojo'
self._keys = keys
property keys:
@@ -445,6 +446,14 @@
self._populate_keys()
return self._keys
+ def items(self):
+ cdef _LeafLineEntry entry
+ items = []
+ for entry in self._lines.itervalues():
+ entry._ensure_refs(self._key_length, self._ref_list_length)
+ PyList_Append(items, (entry.key, (entry.value, entry.refs)))
+ return items
+
def __len__(self):
return len(self._lines)
# return len(self._keys)
=== modified file 'bzrlib/btree_index.py'
--- a/bzrlib/btree_index.py 2009-07-01 20:51:38 +0000
+++ b/bzrlib/btree_index.py 2009-07-01 22:17:39 +0000
@@ -924,10 +924,10 @@
if self._row_offsets[-1] == 1:
# There is only the root node, and we read that via key_count()
if self.node_ref_lists:
- for key, (value, refs) in sorted(self._root_node.keys.items()):
+ for key, (value, refs) in sorted(self._root_node.items()):
yield (self, key, value, refs)
else:
- for key, (value, refs) in sorted(self._root_node.keys.items()):
+ for key, (value, refs) in sorted(self._root_node.items()):
yield (self, key, value)
return
start_of_leaves = self._row_offsets[-2]
@@ -943,11 +943,11 @@
# for spilling index builds to disk.
if self.node_ref_lists:
for _, node in nodes:
- for key, (value, refs) in sorted(node.keys.items()):
+ for key, (value, refs) in sorted(node.items()):
yield (self, key, value, refs)
else:
for _, node in nodes:
- for key, (value, refs) in sorted(node.keys.items()):
+ for key, (value, refs) in sorted(node.items()):
yield (self, key, value)
@staticmethod
More information about the bazaar-commits
mailing list