From: 'Kevin D. ' <ke...@tr...> - 2006-03-02 23:04:40
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD> <STYLE type=text/css> P, UL, OL, DL, DIR, MENU, PRE { margin: 0 auto;}</STYLE> <META content="MSHTML 6.00.2900.2802" name=GENERATOR></HEAD> <BODY leftMargin=1 topMargin=1 rightMargin=1><FONT face=Tahoma> <DIV><FONT face=Arial size=2>Bryan-</FONT></DIV> <DIV><FONT face=Arial size=2></FONT> </DIV> <DIV><FONT face=Arial size=2></FONT></DIV> <DIV><FONT face=Arial size=2>Fair enough. I think that if explicit clustering is desired that a container like your logical container (or a BTree with clustered indexes) would be a good choice... The clustering requirements of these kinds of records are best managed at the application level anyway (where there is implicit knowledge of which records should be co-located).</FONT></DIV> <DIV><FONT face=Arial size=2></FONT> </DIV> <DIV><FONT face=Arial size=2>The implicit clustering I was talking about would be for the general case where there is no application level knowledge of how best to cluster records.</FONT></DIV> <DIV><FONT face=Arial size=2></FONT> </DIV> <DIV><FONT face=Arial size=2>- K</FONT></DIV> <DIV><FONT face=Arial size=2> </FONT> <TABLE> <TBODY> <TR> <TD width=1 bgColor=blue><FONT face=Arial size=2></FONT></TD> <TD><FONT face=Arial size=2><FONT color=red>> Kevin,<BR><BR>I was thinking of a persistent data structure providing a collection,<BR>not a Java collection class such as java.util.TreeMap. So there is a<BR>record for the container and then individual records for each entry in<BR>the collection. For example, I use a double-linked list to maintain<BR>many-to-one associations among records. One of the records maintains<BR>the head/tail/size of the many-to-one collection. The other records<BR>have the prior/next recids. To the extent that reads are likely to<BR>traverse the member records in such a collection, a significiant<BR>performance benefit can be realized by clustering those records onto<BR>pages.<BR><BR>More broadly, my point is that clustering can be deliberate. To the<BR>extent that deliberate record cluster improves read performance, then<BR>NOT using an in-place update will degrade read performance.<BR><BR>At this point there is no facility for clustering in jdbm so it is<BR>not possible to empirically characterize the performance tradeoff<BR>for any given application.<BR><BR>-bryan<BR><BR>-----Original Message-----<BR>From: <A href="mailto:jdb...@li..."><FONT color=#0000ff>jdb...@li...</FONT></A><BR>To: JDBM Developer listserv<BR>Sent: 3/2/2006 9:58 AM<BR>Subject: re[6]: [Jdbm-developer] Concurrency in translation system / n<BR>on-tran sactional items<BR><BR>Bryan-<BR><BR>I'm sure we'll have many interesting discussions about the best approach<BR>for this - but just to address a couple of points made:<BR><BR>Collections: A collection is a higher level abstraction that is treated<BR>as a single record. If you have multiple entries in a page of a<BR>collection, and you change one entry, then the entire collection page<BR>will be written back, so the proximity is not effected. Similarly, if<BR>you were runnnig the current jdbm h*tree in the system I propose, each<BR>page of the tree would be written as a whole, so making a change to one<BR>element in the tree would not impact the hash grouping.<BR><BR>There are other advantages to always writing changed records to clean<BR>pages, and I'm pretty sure that we will eventually find that these<BR>advantages outweigh any bennefits of writing in-place. Some examples of<BR>the advantages:<BR><BR>1. Record header does not have to contain a 'consumed' byte count. We<BR>are going to have to add a reverse lookup for the logical recid which<BR>will increase the record header size - not having the consumed byte<BR>count will make the overall hit 4 extra bytes instead of 8. Minor<BR>point, but definitely an advantage.<BR><BR>2. IO performance in the safe. If records are updated in-place, the<BR>number of pages that must be written to the safe increases dramatically.<BR><BR>3. Complete removal of the free row search bottleneck (as discussed<BR>already)<BR><BR>4. Implicit proximity of records<BR><BR><BR>There may be other advantages, but I believe that the above (especially<BR>#2) will far outweigh any advantages to in-place updates.<BR><BR>So we can get a handle on it, what advantages do you see to in-place<BR>updates? If we can get a list going, then we can do a side by side<BR>comparison and make a solid decision one way or ther other.<BR><BR>Cheers!<BR><BR>- K<BR><BR><BR> <BR> > Kevin,<BR><BR>It is not a problem if we write back records in place when they fit<BR>in place, but only how we recycle records which are no longer used.<BR>While implicit proximity can be obtained in the manner you suggest,<BR>it can also break apart a set of records which were clustered earlier.<BR>For example, you write a collection and later update 1 row in the<BR>collection. Those rows will now be on discontinuous pages.<BR><BR>I do agree with the principle that laying out serialized records onto<BR>blank pages is much faster and has lower contention. Java uses a mark<BR>and sweep approach to clear out historical pages, but Java is not facing<BR>I/O costs and jdbm does. So the tradeoff will be somewhat different.<BR><BR>-bryan<BR><BR>-----Original Message-----<BR>From: <A href="mailto:jdb...@li..."><FONT color=#0000ff><mailto:jdb...@li...></FONT></A><BR><A href="mailto:jdb...@li..."><FONT color=#0000ff>jdb...@li...</FONT></A><BR>To: JDBM Developer listserv<BR>Sent: 3/1/2006 10:27 PM<BR>Subject: re[4]: [Jdbm-developer] Concurrency in translation system / n<BR>on-tran sactional items<BR><BR>Bryan-<BR><BR>A perpendicular thought:<BR><BR>I think that if we just say that we will never write a record back in<BR>place (changed records always get written to new pages, laid down one<BR>after another), then the need for any type of allocator goes out the<BR>window. A periodic garbage collecting run can force rows from partially<BR>used pages into the cache - when they fall out, they will get laid down<BR>onto clean pages with no space in between them... <BR><BR>I believe that this is actually how modern GCs operate in primary<BR>memory... The more I've read about allocation strategies, the more<BR>convinced I've become that they are really only needed in systems that<BR>don't allow relocation of records (i.e. C/C++ where pointer arithmetic<BR>would get hosed by a move).<BR><BR>The approach of always laying changed rows down on new pages has the<BR>added bennefit of providing an implicit proximity algorithm - I think it<BR>is safe to assume that records that are updated by a given transaction<BR>will also tend to be read together....<BR><BR>Anyone needing more explicit proximity control can resort to a higher<BR>level container (such as your logical container).<BR><BR>Finally, this removes the free list completely from the<BR>implementation.... no bottleneck, no concurrent access worries, etc...<BR><BR>- K<BR><BR> > Kevin,<BR><BR>Log-structured stores do relieve most of the allocation burden, but<BR>we still need to handle recycling of free deleted rows. <BR><BR>It could be Fibbinoci or powers of two or whatever. The important<BR>part is reducing a first fit linear scan of an unordered list to<BR>being able to pop the head of the list off in O(1) and have a <BR>"satisfactory" fit.<BR><BR>-bryan<BR><BR>-----Original Message-----<BR>From: <A href="mailto:jdb...@li..."><FONT color=#0000ff><mailto:jdb...@li...></FONT></A><BR><A href="mailto:jdb...@li..."><FONT color=#0000ff><mailto:jdb...@li...></FONT></A><BR><A href="mailto:jdb...@li..."><FONT color=#0000ff><mailto:jdb...@li...></FONT></A><BR><A href="mailto:jdb...@li..."><FONT color=#0000ff>jdb...@li...</FONT></A><BR>To: 'JDBM Developer listserv '<BR>Sent: 2/28/2006 6:28 PM<BR>Subject: re[2]: [Jdbm-developer] Concurrency in translation system /<BR>non-tran sactional items<BR><BR>Bryan-<BR><BR>Ah yes - I remember now - sorry about that. I believe that we had<BR>discussed a Fibbinoci series approach... hard to believe it's been so<BR>long.<BR><BR><BR>As an FYI, I'm digging into the structured log concept, and it may<BR>completely remove the requirement and bottleneck for searching for best<BR>fit, etc... I'll comment more when I'm done noodling on the idea. I'm<BR>beginning to see why Alex is saying that the whole allocation problem<BR>may just go away...<BR><BR>- K<BR><BR><BR> > Kevin,<BR><BR>I am with you. However, the hotspot in the free physical row list is<BR>from scanning for the first free physical row that is a sufficient fit<BR>(or a "good" fit). A linked list is not sufficient for that purpose.<BR>I think that we need to maintain an array of free physical rows based<BR>on some sizes (e.g., powers of 2) so that a request can always be<BR>directed<BR>to the free list whose entries are the smallest sufficent size. At that<BR>point we can just pull off the head of the list. That action can be<BR>made<BR>atomic in one way or another.<BR><BR>-bryan<BR><BR>-----Original Message-----<BR>From: <A href="mailto:jdb...@li..."><FONT color=#0000ff><mailto:jdb...@li...></FONT></A><BR><A href="mailto:jdb...@li..."><FONT color=#0000ff><mailto:jdb...@li...></FONT></A><BR><A href="mailto:jdb...@li..."><FONT color=#0000ff><mailto:jdb...@li...></FONT></A><BR><A href="mailto:jdb...@li..."><FONT color=#0000ff><mailto:jdb...@li...></FONT></A><BR><A href="mailto:jdb...@li..."><FONT color=#0000ff><mailto:jdb...@li...></FONT></A><BR><A href="mailto:jdb...@li..."><FONT color=#0000ff><mailto:jdb...@li...></FONT></A><BR><A href="mailto:jdb...@li..."><FONT color=#0000ff><mailto:jdb...@li...></FONT></A><BR><A href="mailto:jdb...@li..."><FONT color=#0000ff>jdb...@li...</FONT></A><BR>To: JDBM Developer listserv<BR>Sent: 2/27/2006 9:14 PM<BR>Subject: [Jdbm-developer] Concurrency in translation system /<BR>non-transactional items<BR><BR>Here are some comments on discussions last week:<BR><BR>Concurrency in the mapping pages - Alex - you asked Brian about how<BR>different txs would view the mapping system. The answer is that the<BR>mapping pages will be part of the non-transactional data set. This<BR>means that all transactions will share the same view and (only) version<BR>of the mapping pages. The trick is how to design the mapping data<BR>structure so simultaneous changes by multiple tx don't invalidate the<BR>data structure from the perspecive of each tx. With the mapping system,<BR>I think this is relatively easy to do. With a b-link index, it will be<BR>harder (but we have to handle that situation as well).<BR><BR>Non transactional writes - the scheme proposed by Bryan is directly in<BR>line with my proposal from a few weeks ago. The scanning of the free<BR>lists can be easily fixed by implementing the free rows as an in-place<BR>linked list - this could actually be done in the current jdbm system<BR>with some minor tweaks to the system.<BR><BR>Transaction contention when looking for the next free row would then be<BR>limited to pulling the head of the list - this should be quite fast.<BR>The page of the list that contains the head would have to be written to<BR>the safe frequently, but that's it. By adding a third 'reserved' list<BR>to the translation page, it should be possible to reserve a record id,<BR>and only actually populate that entry when the transaction that made the<BR>reservation commits. System failure rollback is achieved by flushing<BR>the reserved list (easily done by appending the reserved list to the end<BR>of the free list). Tx rollback would be similar.<BR><BR>The point here is that the translation pages are on par with a b-link<BR>based index, but with direct access instead of tree walking. The<BR>challenges of handling transactions in a b-link tree will be identical<BR>to those in the translation pages.<BR><BR>The question of how to handle concurrency with a blink tree is actually<BR>of interest to me - I'll throw that out in another email.<BR><BR>- K<BR><BR><BR>Kevin Day<BR>Trumpet, Inc.<BR><A href="http://www.trumpetinc.com"><FONT color=#0000ff><http://www.trumpetinc.com></FONT></A> <A href="http://www.trumpetinc.com"><FONT color=#0000ff><http://www.trumpetinc.com></FONT></A><BR><A href="http://www.trumpetinc.com"><FONT color=#0000ff><http://www.trumpetinc.com></FONT></A> <A href="http://www.trumpetinc.com"><FONT color=#0000ff><http://www.trumpetinc.com></FONT></A><BR><A href="http://www.trumpetinc.com"><FONT color=#0000ff><http://www.trumpetinc.com></FONT></A> <A href="http://www.trumpetinc.com"><FONT color=#0000ff><http://www.trumpetinc.com></FONT></A><BR><A href="http://www.trumpetinc.com"><FONT color=#0000ff><http://www.trumpetinc.com></FONT></A> <A href="http://www.trumpetinc.com"><FONT color=#0000ff><http://www.trumpetinc.com></FONT></A><BR><A href="http://www.trumpetinc.com"><FONT color=#0000ff><http://www.trumpetinc.com></FONT></A> <A href="http://www.trumpetinc.com"><FONT color=#0000ff><http://www.trumpetinc.com></FONT></A><BR><A href="http://www.trumpetinc.com"><FONT color=#0000ff><http://www.trumpetinc.com></FONT></A> <A href="http://www.trumpetinc.com"><FONT color=#0000ff><http://www.trumpetinc.com></FONT></A><BR><A href="http://www.trumpetinc.com"><FONT color=#0000ff><http://www.trumpetinc.com></FONT></A> <A href="http://www.trumpetinc.com"><FONT color=#0000ff><http://www.trumpetinc.com></FONT></A><BR><A href="http://www.trumpetinc.com"><FONT color=#0000ff><http://www.trumpetinc.com></FONT></A> <A href="http://www.trumpetinc.com"><FONT color=#0000ff>www.trumpetinc.com</FONT></A><BR><A href="mailto:ke...@tr..."><FONT color=#0000ff><mailto:ke...@tr...></FONT></A> <A href="mailto:ke...@tr..."><FONT color=#0000ff><mailto:ke...@tr...></FONT></A><BR><A href="mailto:ke...@tr..."><FONT color=#0000ff><mailto:ke...@tr...></FONT></A> <A href="mailto:ke...@tr..."><FONT color=#0000ff><mailto:ke...@tr...></FONT></A><BR><A href="mailto:ke...@tr..."><FONT color=#0000ff><mailto:ke...@tr...></FONT></A> <A href="mailto:ke...@tr..."><FONT color=#0000ff><mailto:ke...@tr...></FONT></A><BR><A href="mailto:ke...@tr..."><FONT color=#0000ff><mailto:ke...@tr...></FONT></A> <A href="mailto:ke...@tr..."><FONT color=#0000ff><mailto:ke...@tr...></FONT></A><BR><A href="mailto:ke...@tr..."><FONT color=#0000ff><mailto:ke...@tr...></FONT></A> <A href="mailto:ke...@tr..."><FONT color=#0000ff><mailto:ke...@tr...></FONT></A><BR><A href="mailto:ke...@tr..."><FONT color=#0000ff><mailto:ke...@tr...></FONT></A> <A href="mailto:ke...@tr..."><FONT color=#0000ff><mailto:ke...@tr...></FONT></A><BR><A href="mailto:ke...@tr..."><FONT color=#0000ff><mailto:ke...@tr...></FONT></A> <A href="mailto:ke...@tr..."><FONT color=#0000ff><mailto:ke...@tr...></FONT></A><BR><A href="mailto:ke...@tr..."><FONT color=#0000ff><mailto:ke...@tr...></FONT></A> <A href="mailto:ke...@tr..."><FONT color=#0000ff>ke...@tr...</FONT></A><BR>602-438-7030<BR><BR>------------------------------------------------------- This SF.Net<BR>email is sponsored by xPML, a groundbreaking scripting language that<BR>extends applications into web and mobile media. Attend the live webcast<BR>and join the prime developer group breaking into this new coding<BR>territory!<BR><BR><BR><BR><A href="http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=12164"><FONT color=#0000ff><http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=12164</FONT></A><BR>><BR><A href="http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=12164"><FONT color=#0000ff><http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=12164</FONT></A><BR>><BR><BR><A href="http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=12164"><FONT color=#0000ff><http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=12164</FONT></A><BR>><BR><A href="http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=12164"><FONT color=#0000ff><http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=12164</FONT></A><BR>2><BR><BR><BR><A href="http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=12164"><FONT color=#0000ff><http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=12164</FONT></A><BR>><BR><A href="http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=12164"><FONT color=#0000ff><http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=12164</FONT></A><BR>2><BR><BR><A href="http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=12164"><FONT color=#0000ff><http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=12164</FONT></A><BR>2><BR><A href="http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642"><FONT color=#0000ff>http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642</FONT></A><BR>_______________________________________________ Jdbm-developer mailing<BR>list <A href="mailto:Jdb...@li..."><FONT color=#0000ff><mailto:Jdb...@li...></FONT></A><BR><A href="mailto:Jdb...@li..."><FONT color=#0000ff><mailto:Jdb...@li...></FONT></A><BR><A href="mailto:Jdb...@li..."><FONT color=#0000ff><mailto:Jdb...@li...></FONT></A><BR><A href="mailto:Jdb...@li..."><FONT color=#0000ff><mailto:Jdb...@li...></FONT></A><BR><A href="mailto:Jdb...@li..."><FONT color=#0000ff><mailto:Jdb...@li...></FONT></A><BR><A href="mailto:Jdb...@li..."><FONT color=#0000ff><mailto:Jdb...@li...></FONT></A><BR><A href="mailto:Jdb...@li..."><FONT color=#0000ff><mailto:Jdb...@li...></FONT></A><BR><A href="mailto:Jdb...@li..."><FONT color=#0000ff>Jdb...@li...</FONT></A><BR><A href="https://lists.sourceforge.net/lists/listinfo/jdbm-developer"><FONT color=#0000ff><https://lists.sourceforge.net/lists/listinfo/jdbm-developer></FONT></A><BR><A href="https://lists.sourceforge.net/lists/listinfo/jdbm-developer"><FONT color=#0000ff><https://lists.sourceforge.net/lists/listinfo/jdbm-developer></FONT></A><BR><A href="https://lists.sourceforge.net/lists/listinfo/jdbm-developer"><FONT color=#0000ff><https://lists.sourceforge.net/lists/listinfo/jdbm-developer></FONT></A><BR><A href="https://lists.sourceforge.net/lists/listinfo/jdbm-developer"><FONT color=#0000ff><https://lists.sourceforge.net/lists/listinfo/jdbm-developer></FONT></A><BR><A href="https://lists.sourceforge.net/lists/listinfo/jdbm-developer"><FONT color=#0000ff><https://lists.sourceforge.net/lists/listinfo/jdbm-developer></FONT></A><BR><A href="https://lists.sourceforge.net/lists/listinfo/jdbm-developer"><FONT color=#0000ff><https://lists.sourceforge.net/lists/listinfo/jdbm-developer></FONT></A><BR><A href="https://lists.sourceforge.net/lists/listinfo/jdbm-developer"><FONT color=#0000ff><https://lists.sourceforge.net/lists/listinfo/jdbm-developer></FONT></A><BR><A href="https://lists.sourceforge.net/lists/listinfo/jdbm-developer"><FONT color=#0000ff>https://lists.sourceforge.net/lists/listinfo/jdbm-developer</FONT></A><BR><BR><<BR> <BR>------------------------------------------------------- This SF.Net<BR>email is sponsored by xPML, a groundbreaking scripting language that<BR>extends applications into web and mobile media. Attend the live webcast<BR>and join the prime developer group breaking into this new coding<BR>territory!<BR><BR><BR><A href="http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=12164"><FONT color=#0000ff><http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=12164</FONT></A><BR>><BR><A href="http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=12164"><FONT color=#0000ff><http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=12164</FONT></A><BR>2><BR><BR><A href="http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=12164"><FONT color=#0000ff><http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=12164</FONT></A><BR>2><BR><A href="http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642"><FONT color=#0000ff>http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642</FONT></A><BR>_______________________________________________ Jdbm-developer mailing<BR>list <A href="mailto:Jdb...@li..."><FONT color=#0000ff><mailto:Jdb...@li...></FONT></A><BR><A href="mailto:Jdb...@li..."><FONT color=#0000ff><mailto:Jdb...@li...></FONT></A><BR><A href="mailto:Jdb...@li..."><FONT color=#0000ff><mailto:Jdb...@li...></FONT></A><BR><A href="mailto:Jdb...@li..."><FONT color=#0000ff>Jdb...@li...</FONT></A><BR><A href="https://lists.sourceforge.net/lists/listinfo/jdbm-developer"><FONT color=#0000ff><https://lists.sourceforge.net/lists/listinfo/jdbm-developer></FONT></A><BR><A href="https://lists.sourceforge.net/lists/listinfo/jdbm-developer"><FONT color=#0000ff><https://lists.sourceforge.net/lists/listinfo/jdbm-developer></FONT></A><BR><A href="https://lists.sourceforge.net/lists/listinfo/jdbm-developer"><FONT color=#0000ff><https://lists.sourceforge.net/lists/listinfo/jdbm-developer></FONT></A><BR><A href="https://lists.sourceforge.net/lists/listinfo/jdbm-developer"><FONT color=#0000ff>https://lists.sourceforge.net/lists/listinfo/jdbm-developer</FONT></A><BR><BR><<BR> <BR>------------------------------------------------------- This SF.Net<BR>email is sponsored by xPML, a groundbreaking scripting language that<BR>extends applications into web and mobile media. Attend the live webcast<BR>and join the prime developer group breaking into this new coding<BR>territory!<BR><BR><A href="http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=12164"><FONT color=#0000ff><http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=12164</FONT></A><BR>2><BR><A href="http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642"><FONT color=#0000ff>http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642</FONT></A><BR>_______________________________________________ Jdbm-developer mailing<BR>list <A href="mailto:Jdb...@li..."><FONT color=#0000ff><mailto:Jdb...@li...></FONT></A><BR><A href="mailto:Jdb...@li..."><FONT color=#0000ff>Jdb...@li...</FONT></A><BR><A href="https://lists.sourceforge.net/lists/listinfo/jdbm-developer"><FONT color=#0000ff><https://lists.sourceforge.net/lists/listinfo/jdbm-developer></FONT></A><BR><A href="https://lists.sourceforge.net/lists/listinfo/jdbm-developer"><FONT color=#0000ff>https://lists.sourceforge.net/lists/listinfo/jdbm-developer</FONT></A><BR><BR><<BR> <BR>------------------------------------------------------- This SF.Net<BR>email is sponsored by xPML, a groundbreaking scripting language that<BR>extends applications into web and mobile media. Attend the live webcast<BR>and join the prime developer group breaking into this new coding<BR>territory!<BR><A href="http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642"><FONT color=#0000ff>http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642</FONT></A><BR>_______________________________________________ Jdbm-developer mailing<BR>list <A href="mailto:Jdb...@li..."><FONT color=#0000ff>Jdb...@li...</FONT></A><BR><A href="https://lists.sourceforge.net/lists/listinfo/jdbm-developer"><FONT color=#0000ff>https://lists.sourceforge.net/lists/listinfo/jdbm-developer</FONT></A><BR><BR><<BR></FONT></FONT></TD></TR></TBODY></TABLE></DIV></FONT></BODY></HTML> |