Prepare for 1.0020
[dbsrgits/DBM-Deep.git] / lib / DBM / Deep / Internals.pod
index 71a1b7e..3def506 100644 (file)
@@ -2,35 +2,40 @@
 
 DBM::Deep::Internals
 
+=head1 OUT OF DATE
+
+This document is out-of-date. It describes an intermediate file format used
+during the development from 0.983 to 1.0000. It will be rewritten soon.
+
 =head1 DESCRIPTION
 
-This is a document describing the internal workings of L<DBM::Deep/>. It is
+This is a document describing the internal workings of L<DBM::Deep>. It is
 not necessary to read this document if you only intend to be a user. This
 document is intended for people who either want a deeper understanding of
-specifics of how L<DBM::Deep/> works or who wish to help program
-L<DBM::Deep/>.
+specifics of how L<DBM::Deep> works or who wish to help program
+L<DBM::Deep>.
 
 =head1 CLASS LAYOUT
 
-L<DBM::Deep/> is broken up into five classes in three inheritance hierarchies.
+L<DBM::Deep> is broken up into five classes in three inheritance hierarchies.
 
 =over 4
 
 =item *
 
-L<DBM::Deep/> is the parent of L<DBM::Deep::Array/> and L<DBM::Deep::Hash/>.
+L<DBM::Deep> is the parent of L<DBM::Deep::Array> and L<DBM::Deep::Hash>.
 These classes form the immediate interface to the outside world. They are the
 classes that provide the TIE mechanisms as well as the OO methods.
 
 =item *
 
-L<DBM::Deep::Engine/> is the layer that deals with the mechanics of reading
+L<DBM::Deep::Engine> is the layer that deals with the mechanics of reading
 and writing to the file. This is where the logic of the file layout is
 handled.
 
 =item *
 
-L<DBM::Deep::File/> is the layer that deals with the physical file. As a
+L<DBM::Deep::File> is the layer that deals with the physical file. As a
 singleton that every other object has a reference to, it also provides a place
 to handle datastructure-wide items, such as transactions.
 
@@ -57,17 +62,22 @@ This is the tagging of the file header. The file used by versions prior to
 
 =item * Version
 
-This is four bytes containing the header version. This lets the header change over time.
+This is four bytes containing the file version. This lets the file format change over time.
+
+=item * Constants
+
+These are the file-wide constants that determine how the file is laid out.
+They can only be set upon file creation.
 
 =item * Transaction information
 
 The current running transactions are stored here, as is the next transaction
 ID.
 
-=item * Constants
+=item * Freespace information
 
-These are the file-wide constants that determine how the file is laid out.
-They can only be set upon file creation.
+Pointers into the next free sectors of the various sector sizes (Index,
+Bucketlist, and Data) are stored here.
 
 =back
 
@@ -126,10 +136,10 @@ than the key.
 
 =head1 PERFORMANCE
 
-L<DBM::Deep/> is written completely in Perl. It also is a multi-process DBM
+L<DBM::Deep> is written completely in Perl. It also is a multi-process DBM
 that uses the datafile as a method of synchronizing between multiple
 processes. This is unlike most RDBMSes like MySQL and Oracle. Furthermore,
-unlike all RDBMSes, L<DBM::Deep/> stores both the data and the structure of
+unlike all RDBMSes, L<DBM::Deep> stores both the data and the structure of
 that data as it would appear in a Perl program.
 
 =head2 CPU
@@ -148,7 +158,7 @@ increasing your memeory usage at all.
 DBM::Deep is I/O-bound, pure and simple. The faster your disk, the faster
 DBM::Deep will be. Currently, when performing C<my $x = $db-E<gt>{foo}>, there
 are a minimum of 4 seeks and 1332 + N bytes read (where N is the length of your
-data). (All values assume a medium filesize.) The actions take are:
+data). (All values assume a medium filesize.) The actions taken are:
 
 =over 4
 
@@ -251,9 +261,9 @@ Run time was 12 min 3 sec.
 
 =head2 MEMORY USAGE
 
-One of the great things about L<DBM::Deep/> is that it uses very little memory.
+One of the great things about L<DBM::Deep> is that it uses very little memory.
 Even with huge databases (1,000,000+ keys) you will not see much increased
-memory on your process.  L<DBM::Deep/> relies solely on the filesystem for storing
+memory on your process.  L<DBM::Deep> relies solely on the filesystem for storing
 and fetching data.  Here is output from I<top> before even opening a database
 handle: