-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Comments welcomed: Not updated yet to cope with Durus 3.5 changes: http://www.argo.es/~jcea/artic/know_how-durus-3_4.htm Differences from 20060629 release: """ Index: KNOW_HOW-DURUS =================================================================== - --- KNOW_HOW-DURUS (revision 187) +++ KNOW_HOW-DURUS (working copy) @@ -325,18 +327,43 @@ starts with a "x" char :-). - -### Weak references (20060424) +### Weak references (20061003) - -Persistent objects can't have weak references to other - -persistent objects to ease garbage collection in the Storage. All - -interobject references in the Storage will be strong. - - Your program can keep internal (non persistent) weak references to persistent loaded instantes. Those references will be cleared automatically if necessary: cache shrink, conflicts, etc. You can keep such references across transactions boundaries. +Persistent objects can't have weak references to other +persistent objects to ease garbage collection in the Storage. All +interobject references in the Storage will be strong. +Nevertheless you can simulate sort-of weak references by hand +using the internal OID of referenced persistent objects, since +you can use the connection's "get()" method to load a persistent +object given its OID. This manually managed reference doesn't +preclude garbage collection of referenced objects if their reference +count goes to zero. Just like standard weak references. + +Some details: + +- This usage pattern is not recommended by Durus developers. See + http://mail.mems-exchange.org/durusmail/durus-users/712/ + +- Current Durus code does TWO database fetches when doing + connection's "get()". This is a Durus bug and should be + solved in a future release. See + http://mail.mems-exchange.org/durusmail/durus-users/701/ + +- An object fetched via the connection "get()" is not strong + referenced, so it can vanish under your feet if other durus + client/thread makes its reference count go to zero. + +- Initially created persistent objects have no OID until + transaction commit, so you can't store their OID's until + commited by a previous transaction. + + ### Implicit object loading/dump (20060424) Transparent object loading/dumping is the key to a successful @@ -509,6 +536,67 @@ discussion in http://mail.mems-exchange.org/durusmail/durus-users/563/ +### BTree methods (20061003) + +Durus provides several persistent classes to use in your programs. The +most interesting and "different" is BTree. + +BTree provides a (persistent) dictionary-like class. The main advantage +is that a BTree is not fully loaded in RAM. Only the elements needed are +fetched. So you can have an arbitrary huge BTree, without eating your RAM. + +As said, BTree is used like a normal python dictionary, but there are some +additional useful features: + +- BTree keys are always kept sorted. So when you iterate over the elements, + you get them in order. + +- Some useful methods (some shared with python dictionaries, some BTree + specific features): + + - "iteritems": Iterator over the (key,value) data in the BTree. Keys + are given in order. + + - "items_from": Iterator over the (key,value) data in the BTree, starting + in the specified key. Keys are given in order. + + - "items_backward": Iterator over the (key,value) data in the BTree. + Keys will be given in reverse order. + + - "items_backward_from": Iterator over the (key,value) data in the BTree, + starting in the specified key. Keys are given in reverse order. + + - "items_range": Iterator over the (key,value) data in the BTree, with + keys in the specified range. Keys are given in order. + + - "iterkeys": Iterator over (key) data in the BTree. Keys are given + in order. + + - "itervalues": Iterator over (value) date in the BTree. The values + are given in key order. + + - "items": Give a list of (key,value) elements, in key order. Beware RAM + usage, if your BTree is big. + + - "keys": Give a list of key elements, in key order. Beware RAM usage + if your BTree is big. + + - "values": Give a list of value elements, in key order. Beware RAM + usage if your BTree is big. + + - "__reversed__": Iterator over (key) data in the BTree, in inverse order. + + - "get_min_item": Gives the (key,value) pair with the minimal key in + the BTree. Since BTree's are stored sorted, this method is very fast. + + - "get_max_item": Gives the (key,value) pair with the maximum key in + the BTree. Since BTree's are stores sorted, this method is very fast. + + - "add": Add a new key->value to the BTree. Default "value" is "True". + + - "has_key", "setdefault", "clear", "get", etc: Like python dictionaries. """ - -- Jesus Cea Avion _/_/ _/_/_/ _/_/_/ jcea@argo.es http://www.argo.es/~jcea/ _/_/ _/_/ _/_/ _/_/ _/_/ jabber / xmpp:jcea@jabber.org _/_/ _/_/ _/_/_/_/_/ _/_/ _/_/ _/_/ _/_/ _/_/ "Things are not so easy" _/_/ _/_/ _/_/ _/_/ _/_/ _/_/ "My name is Dump, Core Dump" _/_/_/ _/_/_/ _/_/ _/_/ "El amor es poner tu felicidad en la felicidad de otro" - Leibniz -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2.2 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iQCVAwUBRSU1/Zlgi5GaxT1NAQJffgP/cnCgQSqhHU4hSZPO9dMjLM4RPgGVHKqY O0QJgeXyeCwGHoJOllm4UdeXiBlJoo//n532PpskDS5oan24h/34lWIQ4z1kUfMY yAwwcAZgQCBTeHqhcqR3DZSUEJS05LyXRdFFnU3KJydesSdEJ5Pb7q8pMaMGU4fx +WtXfzhTNH4= =m+BX -----END PGP SIGNATURE-----