ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/BDB/README
Revision: 1.10
Committed: Tue Jul 8 08:35:12 2008 UTC (15 years, 10 months ago) by root
Branch: MAIN
CVS Tags: rel-1_6
Changes since 1.9: +64 -11 lines
Log Message:
1.6

File Contents

# User Rev Content
1 root 1.3 NAME
2     BDB - Asynchronous Berkeley DB access
3    
4     SYNOPSIS
5     use BDB;
6    
7 root 1.4 my $env = db_env_create;
8    
9     mkdir "bdtest", 0700;
10     db_env_open
11     $env,
12     "bdtest",
13     BDB::INIT_LOCK | BDB::INIT_LOG | BDB::INIT_MPOOL
14     | BDB::INIT_TXN | BDB::RECOVER | BDB::USE_ENVIRON | BDB::CREATE,
15     0600;
16    
17     $env->set_flags (BDB::AUTO_COMMIT | BDB::TXN_NOSYNC, 1);
18    
19     my $db = db_create $env;
20     db_open $db, undef, "table", undef, BDB::BTREE, BDB::AUTO_COMMIT | BDB::CREATE
21     | BDB::READ_UNCOMMITTED, 0600;
22     db_put $db, undef, "key", "data", 0, sub {
23     db_del $db, undef, "key";
24     };
25     db_sync $db;
26    
27 root 1.6 # when you also use Coro, management is easy:
28     use Coro::BDB;
29    
30 root 1.9 # automatic event loop intergration with AnyEvent:
31     use AnyEvent::BDB;
32 root 1.4
33     # automatic result processing with EV:
34     my $WATCHER = EV::io BDB::poll_fileno, EV::READ, \&BDB::poll_cb;
35    
36     # with Glib:
37     add_watch Glib::IO BDB::poll_fileno,
38     in => sub { BDB::poll_cb; 1 };
39    
40     # or simply flush manually
41     BDB::flush;
42    
43 root 1.3 DESCRIPTION
44     See the BerkeleyDB documentation
45     (<http://www.oracle.com/technology/documentation/berkeley-db/db/index.ht
46     ml>). The BDB API is very similar to the C API (the translation has been
47     very faithful).
48    
49     See also the example sections in the document below and possibly the eg/
50     subdirectory of the BDB distribution. Last not least see the IO::AIO
51     documentation, as that module uses almost the same asynchronous request
52     model as this module.
53    
54     I know this is woefully inadequate documentation. Send a patch!
55    
56     REQUEST ANATOMY AND LIFETIME
57     Every request method creates a request. which is a C data structure not
58     directly visible to Perl.
59    
60     During their existance, bdb requests travel through the following
61     states, in order:
62    
63     ready
64     Immediately after a request is created it is put into the ready
65     state, waiting for a thread to execute it.
66    
67     execute
68     A thread has accepted the request for processing and is currently
69     executing it (e.g. blocking in read).
70    
71     pending
72     The request has been executed and is waiting for result processing.
73    
74     While request submission and execution is fully asynchronous, result
75     processing is not and relies on the perl interpreter calling
76     "poll_cb" (or another function with the same effect).
77    
78     result
79     The request results are processed synchronously by "poll_cb".
80    
81     The "poll_cb" function will process all outstanding aio requests by
82     calling their callbacks, freeing memory associated with them and
83     managing any groups they are contained in.
84    
85     done
86     Request has reached the end of its lifetime and holds no resources
87     anymore (except possibly for the Perl object, but its connection to
88     the actual aio request is severed and calling its methods will
89     either do nothing or result in a runtime error).
90    
91 root 1.8 WIN32 FILENAMES/DATABASE NAME MESS
92     Perl on Win32 supports only ASCII filenames (the reason is that it
93     abuses an internal flag to store wether a filename is Unicode or ANSI,
94     but that flag is used for somethign else in the perl core, so there is
95     no way to detect wether a filename is ANSI or Unicode-encoded). The BDB
96     module tries to work around this issue by assuming that the filename is
97     an ANSI filename and BDB was built for unicode support.
98 root 1.7
99 root 1.3 BERKELEYDB FUNCTIONS
100     All of these are functions. The create functions simply return a new
101 root 1.7 object and never block. All the remaining functions take an optional
102 root 1.5 callback as last argument. If it is missing, then the function will be
103     executed synchronously. In both cases, $! will reflect the return value
104     of the function.
105 root 1.3
106     BDB functions that cannot block (mostly functions that manipulate
107     settings) are method calls on the relevant objects, so the rule of thumb
108 root 1.7 is: if it's a method, it's not blocking, if it's a function, it takes a
109 root 1.3 callback as last argument.
110    
111 root 1.10 In the following, $int signifies an integer return value, "bdb_filename"
112     is a "filename" (octets on unix, madness on windows), "U32" is an
113     unsigned 32 bit integer, "int" is some integer, "NV" is a floating point
114     value.
115 root 1.3
116     The "SV *" types are generic perl scalars (for input and output of data
117     values), and the "SV *callback" is the optional callback function to
118     call when the request is completed.
119    
120     The various "DB_ENV" etc. arguments are handles return by
121     "db_env_create", "db_create", "txn_begin" and so on. If they have an
122     appended "_ornull" this means they are optional and you can pass "undef"
123     for them, resulting a NULL pointer on the C level.
124    
125     BDB functions
126     Functions in the BDB namespace, exported by default:
127    
128     $env = db_env_create (U32 env_flags = 0)
129     flags: RPCCLIENT
130    
131 root 1.10 db_env_open (DB_ENV *env, bdb_filename db_home, U32 open_flags, int mode, SV *callback = &PL_sv_undef)
132 root 1.3 open_flags: INIT_CDB INIT_LOCK INIT_LOG INIT_MPOOL INIT_REP INIT_TXN RECOVER RECOVER_FATAL USE_ENVIRON USE_ENVIRON_ROOT CREATE LOCKDOWN PRIVATE REGISTER SYSTEM_MEM
133     db_env_close (DB_ENV *env, U32 flags = 0, SV *callback = &PL_sv_undef)
134     db_env_txn_checkpoint (DB_ENV *env, U32 kbyte = 0, U32 min = 0, U32 flags = 0, SV *callback = &PL_sv_undef)
135     flags: FORCE
136     db_env_lock_detect (DB_ENV *env, U32 flags = 0, U32 atype = DB_LOCK_DEFAULT, SV *dummy = 0, SV *callback = &PL_sv_undef)
137     atype: LOCK_DEFAULT LOCK_EXPIRE LOCK_MAXLOCKS LOCK_MAXWRITE LOCK_MINLOCKS LOCK_MINWRITE LOCK_OLDEST LOCK_RANDOM LOCK_YOUNGEST
138     db_env_memp_sync (DB_ENV *env, SV *dummy = 0, SV *callback = &PL_sv_undef)
139     db_env_memp_trickle (DB_ENV *env, int percent, SV *dummy = 0, SV *callback = &PL_sv_undef)
140 root 1.10 db_env_dbremove (DB_ENV *env, DB_TXN_ornull *txnid, bdb_filename file, bdb_filename database, U32 flags = 0, SV *callback = &PL_sv_undef)
141     db_env_dbrename (DB_ENV *env, DB_TXN_ornull *txnid, bdb_filename file, bdb_filename database, bdb_filename newname, U32 flags = 0, SV *callback = &PL_sv_undef)
142 root 1.3
143     $db = db_create (DB_ENV *env = 0, U32 flags = 0)
144     flags: XA_CREATE
145    
146 root 1.10 db_open (DB *db, DB_TXN_ornull *txnid, bdb_filename file, bdb_filename database, int type, U32 flags, int mode, SV *callback = &PL_sv_undef)
147 root 1.3 flags: AUTO_COMMIT CREATE EXCL MULTIVERSION NOMMAP RDONLY READ_UNCOMMITTED THREAD TRUNCATE
148     db_close (DB *db, U32 flags = 0, SV *callback = &PL_sv_undef)
149     flags: DB_NOSYNC
150 root 1.10 db_upgrade (DB *db, bdb_filename file, U32 flags = 0, SV *callback = &PL_sv_undef)
151 root 1.3 db_compact (DB *db, DB_TXN_ornull *txn = 0, SV *start = 0, SV *stop = 0, SV *unused1 = 0, U32 flags = DB_FREE_SPACE, SV *unused2 = 0, SV *callback = &PL_sv_undef)
152     flags: FREELIST_ONLY FREE_SPACE
153     db_sync (DB *db, U32 flags = 0, SV *callback = &PL_sv_undef)
154     db_key_range (DB *db, DB_TXN_ornull *txn, SV *key, SV *key_range, U32 flags = 0, SV *callback = &PL_sv_undef)
155     db_put (DB *db, DB_TXN_ornull *txn, SV *key, SV *data, U32 flags = 0, SV *callback = &PL_sv_undef)
156     flags: APPEND NODUPDATA NOOVERWRITE
157     db_get (DB *db, DB_TXN_ornull *txn, SV *key, SV *data, U32 flags = 0, SV *callback = &PL_sv_undef)
158     flags: CONSUME CONSUME_WAIT GET_BOTH SET_RECNO MULTIPLE READ_COMMITTED READ_UNCOMMITTED RMW
159     db_pget (DB *db, DB_TXN_ornull *txn, SV *key, SV *pkey, SV *data, U32 flags = 0, SV *callback = &PL_sv_undef)
160     flags: CONSUME CONSUME_WAIT GET_BOTH SET_RECNO MULTIPLE READ_COMMITTED READ_UNCOMMITTED RMW
161     db_del (DB *db, DB_TXN_ornull *txn, SV *key, U32 flags = 0, SV *callback = &PL_sv_undef)
162     db_txn_commit (DB_TXN *txn, U32 flags = 0, SV *callback = &PL_sv_undef)
163     flags: TXN_NOSYNC TXN_SYNC
164     db_txn_abort (DB_TXN *txn, SV *callback = &PL_sv_undef)
165    
166     db_c_close (DBC *dbc, SV *callback = &PL_sv_undef)
167     db_c_count (DBC *dbc, SV *count, U32 flags = 0, SV *callback = &PL_sv_undef)
168     db_c_put (DBC *dbc, SV *key, SV *data, U32 flags = 0, SV *callback = &PL_sv_undef)
169     flags: AFTER BEFORE CURRENT KEYFIRST KEYLAST NODUPDATA
170     db_c_get (DBC *dbc, SV *key, SV *data, U32 flags = 0, SV *callback = &PL_sv_undef)
171     flags: CURRENT FIRST GET_BOTH GET_BOTH_RANGE GET_RECNO JOIN_ITEM LAST NEXT NEXT_DUP NEXT_NODUP PREV PREV_DUP PREV_NODUP SET SET_RANGE SET_RECNO READ_UNCOMMITTED MULTIPLE MULTIPLE_KEY RMW
172     db_c_pget (DBC *dbc, SV *key, SV *pkey, SV *data, U32 flags = 0, SV *callback = &PL_sv_undef)
173     db_c_del (DBC *dbc, U32 flags = 0, SV *callback = &PL_sv_undef)
174    
175     db_sequence_open (DB_SEQUENCE *seq, DB_TXN_ornull *txnid, SV *key, U32 flags = 0, SV *callback = &PL_sv_undef)
176     flags: CREATE EXCL
177     db_sequence_close (DB_SEQUENCE *seq, U32 flags = 0, SV *callback = &PL_sv_undef)
178     db_sequence_get (DB_SEQUENCE *seq, DB_TXN_ornull *txnid, int delta, SV *seq_value, U32 flags = DB_TXN_NOSYNC, SV *callback = &PL_sv_undef)
179     flags: TXN_NOSYNC
180     db_sequence_remove (DB_SEQUENCE *seq, DB_TXN_ornull *txnid = 0, U32 flags = 0, SV *callback = &PL_sv_undef)
181     flags: TXN_NOSYNC
182    
183     db_txn_finish (DB_TXN *txn, U32 flags = 0, SV *callback = &PL_sv_undef)
184     This is not actually a Berkeley DB function but a BDB module extension.
185     The background for this exytension is: It is very annoying to have to
186     check every single BDB function for error returns and provide a codepath
187     out of your transaction. While the BDB module still makes this possible,
188     it contains the following extensions:
189    
190     When a transaction-protected function returns any operating system error
191     (errno > 0), BDB will set the "TXN_DEADLOCK" flag on the transaction.
192     This flag is also set by Berkeley DB functions themselves when an
193     operation fails with LOCK_DEADLOCK, and it causes all further operations
194     on that transaction (including "db_txn_commit") to fail.
195    
196     The "db_txn_finish" request will look at this flag, and, if it is set,
197     will automatically call "db_txn_abort" (setting errno to "LOCK_DEADLOCK"
198     if it isn't set to something else yet). If it isn't set, it will call
199     "db_txn_commit" and return the error normally.
200    
201     How to use this? Easy: just write your transaction normally:
202    
203     my $txn = $db_env->txn_begin;
204     db_get $db, $txn, "key", my $data;
205     db_put $db, $txn, "key", $data + 1 unless $! == BDB::NOTFOUND;
206     db_txn_finish $txn;
207     die "transaction failed" if $!;
208    
209     That is, handle only the expected errors. If something unexpected
210     happens (EIO, LOCK_NOTGRANTED or a deadlock in either db_get or db_put),
211     then the remaining requests (db_put in this case) will simply be skipped
212     (they will fail with LOCK_DEADLOCK) and the transaction will be aborted.
213    
214     You can use the "$txn->failed" method to check wether a transaction has
215     failed in this way and abort further processing (excluding
216     "db_txn_finish").
217    
218     DB_ENV/database environment methods
219     Methods available on DB_ENV/$env handles:
220    
221     DESTROY (DB_ENV_ornull *env)
222     CODE:
223     if (env)
224     env->close (env, 0);
225    
226     $int = $env->set_data_dir (const char *dir)
227     $int = $env->set_tmp_dir (const char *dir)
228     $int = $env->set_lg_dir (const char *dir)
229     $int = $env->set_shm_key (long shm_key)
230     $int = $env->set_cachesize (U32 gbytes, U32 bytes, int ncache = 0)
231 root 1.10 $int = $env->set_flags (U32 flags, int onoff = 1)
232     $int = $env->log_set_config (U32 flags, int onoff = 1) [v4.7]
233     $int = $env->set_intermediate_dir_mode (const char *modestring) [v4.7]
234 root 1.3 $env->set_errfile (FILE *errfile = 0)
235     $env->set_msgfile (FILE *msgfile = 0)
236     $int = $env->set_verbose (U32 which, int onoff = 1)
237     $int = $env->set_encrypt (const char *password, U32 flags = 0)
238     $int = $env->set_timeout (NV timeout_seconds, U32 flags = SET_TXN_TIMEOUT)
239     $int = $env->set_mp_max_openfd (int maxopenfd);
240     $int = $env->set_mp_max_write (int maxwrite, int maxwrite_sleep);
241     $int = $env->set_mp_mmapsize (int mmapsize_mb)
242     $int = $env->set_lk_detect (U32 detect = DB_LOCK_DEFAULT)
243     $int = $env->set_lk_max_lockers (U32 max)
244     $int = $env->set_lk_max_locks (U32 max)
245     $int = $env->set_lk_max_objects (U32 max)
246     $int = $env->set_lg_bsize (U32 max)
247     $int = $env->set_lg_max (U32 max)
248 root 1.4 $int = $env->mutex_set_increment (U32 increment)
249     $int = $env->mutex_set_tas_spins (U32 tas_spins)
250     $int = $env->mutex_set_max (U32 max)
251     $int = $env->mutex_set_align (U32 align)
252 root 1.3
253     $txn = $env->txn_begin (DB_TXN_ornull *parent = 0, U32 flags = 0)
254     flags: READ_COMMITTED READ_UNCOMMITTED TXN_NOSYNC TXN_NOWAIT TXN_SNAPSHOT TXN_SYNC TXN_WAIT TXN_WRITE_NOSYNC
255    
256     Example:
257     use AnyEvent;
258     use BDB;
259    
260     our $FH; open $FH, "<&=" . BDB::poll_fileno;
261     our $WATCHER = AnyEvent->io (fh => $FH, poll => 'r', cb => \&BDB::poll_cb);
262    
263     BDB::min_parallel 8;
264    
265     my $env = db_env_create;
266    
267     mkdir "bdtest", 0700;
268     db_env_open
269     $env,
270     "bdtest",
271     BDB::INIT_LOCK | BDB::INIT_LOG | BDB::INIT_MPOOL | BDB::INIT_TXN | BDB::RECOVER | BDB::USE_ENVIRON | BDB::CREATE,
272     0600;
273    
274     $env->set_flags (BDB::AUTO_COMMIT | BDB::TXN_NOSYNC, 1);
275    
276     DB/database methods
277     Methods available on DB/$db handles:
278    
279     DESTROY (DB_ornull *db)
280     CODE:
281     if (db)
282     {
283     SV *env = (SV *)db->app_private;
284     db->close (db, 0);
285     SvREFCNT_dec (env);
286     }
287    
288     $int = $db->set_cachesize (U32 gbytes, U32 bytes, int ncache = 0)
289     $int = $db->set_flags (U32 flags)
290     flags: CHKSUM ENCRYPT TXN_NOT_DURABLE
291     Btree: DUP DUPSORT RECNUM REVSPLITOFF
292     Hash: DUP DUPSORT
293     Queue: INORDER
294     Recno: RENUMBER SNAPSHOT
295    
296     $int = $db->set_encrypt (const char *password, U32 flags)
297     $int = $db->set_lorder (int lorder)
298     $int = $db->set_bt_minkey (U32 minkey)
299     $int = $db->set_re_delim (int delim)
300     $int = $db->set_re_pad (int re_pad)
301     $int = $db->set_re_source (char *source)
302     $int = $db->set_re_len (U32 re_len)
303     $int = $db->set_h_ffactor (U32 h_ffactor)
304     $int = $db->set_h_nelem (U32 h_nelem)
305     $int = $db->set_q_extentsize (U32 extentsize)
306    
307     $dbc = $db->cursor (DB_TXN_ornull *txn = 0, U32 flags = 0)
308     flags: READ_COMMITTED READ_UNCOMMITTED WRITECURSOR TXN_SNAPSHOT
309     $seq = $db->sequence (U32 flags = 0)
310    
311     Example:
312     my $db = db_create $env;
313     db_open $db, undef, "table", undef, BDB::BTREE, BDB::AUTO_COMMIT | BDB::CREATE | BDB::READ_UNCOMMITTED, 0600;
314    
315     for (1..1000) {
316     db_put $db, undef, "key $_", "data $_";
317    
318     db_key_range $db, undef, "key $_", my $keyrange;
319     my ($lt, $eq, $gt) = @$keyrange;
320     }
321    
322     db_del $db, undef, "key $_" for 1..1000;
323    
324     db_sync $db;
325    
326     DB_TXN/transaction methods
327     Methods available on DB_TXN/$txn handles:
328    
329     DESTROY (DB_TXN_ornull *txn)
330     CODE:
331     if (txn)
332     txn->abort (txn);
333    
334     $int = $txn->set_timeout (NV timeout_seconds, U32 flags = SET_TXN_TIMEOUT)
335     flags: SET_LOCK_TIMEOUT SET_TXN_TIMEOUT
336    
337     $bool = $txn->failed
338     # see db_txn_finish documentation, above
339    
340     DBC/cursor methods
341     Methods available on DBC/$dbc handles:
342    
343     DESTROY (DBC_ornull *dbc)
344     CODE:
345     if (dbc)
346     dbc->c_close (dbc);
347    
348 root 1.6 $int = $cursor->set_priority ($priority = PRIORITY_*)
349    
350 root 1.3 Example:
351     my $c = $db->cursor;
352    
353     for (;;) {
354     db_c_get $c, my $key, my $data, BDB::NEXT;
355     warn "<$!,$key,$data>";
356     last if $!;
357     }
358    
359     db_c_close $c;
360    
361     DB_SEQUENCE/sequence methods
362     Methods available on DB_SEQUENCE/$seq handles:
363    
364     DESTROY (DB_SEQUENCE_ornull *seq)
365     CODE:
366     if (seq)
367     seq->close (seq, 0);
368    
369     $int = $seq->initial_value (db_seq_t value)
370     $int = $seq->set_cachesize (U32 size)
371     $int = $seq->set_flags (U32 flags)
372     flags: SEQ_DEC SEQ_INC SEQ_WRAP
373     $int = $seq->set_range (db_seq_t min, db_seq_t max)
374    
375     Example:
376     my $seq = $db->sequence;
377 root 1.7
378     db_sequence_open $seq, undef, "seq", BDB::CREATE;
379 root 1.3 db_sequence_get $seq, undef, 1, my $value;
380    
381     SUPPORT FUNCTIONS
382     EVENT PROCESSING AND EVENT LOOP INTEGRATION
383 root 1.5 $msg = BDB::strerror [$errno]
384     Returns the string corresponding to the given errno value. If no
385     argument is given, use $!.
386    
387 root 1.7 Note that the BDB module also patches the $! variable directly, so
388     you should be able to get a bdb error string by simply stringifying
389     $!.
390    
391 root 1.3 $fileno = BDB::poll_fileno
392     Return the *request result pipe file descriptor*. This filehandle
393     must be polled for reading by some mechanism outside this module
394     (e.g. Event or select, see below or the SYNOPSIS). If the pipe
395     becomes readable you have to call "poll_cb" to check the results.
396    
397     See "poll_cb" for an example.
398    
399     BDB::poll_cb
400     Process some outstanding events on the result pipe. You have to call
401     this regularly. Returns the number of events processed. Returns
402     immediately when no events are outstanding. The amount of events
403     processed depends on the settings of "BDB::max_poll_req" and
404     "BDB::max_poll_time".
405    
406     If not all requests were processed for whatever reason, the
407     filehandle will still be ready when "poll_cb" returns.
408    
409     Example: Install an Event watcher that automatically calls
410     BDB::poll_cb with high priority:
411    
412     Event->io (fd => BDB::poll_fileno,
413     poll => 'r', async => 1,
414     cb => \&BDB::poll_cb);
415    
416     BDB::max_poll_reqs $nreqs
417     BDB::max_poll_time $seconds
418     These set the maximum number of requests (default 0, meaning
419     infinity) that are being processed by "BDB::poll_cb" in one call,
420     respectively the maximum amount of time (default 0, meaning
421     infinity) spent in "BDB::poll_cb" to process requests (more
422     correctly the mininum amount of time "poll_cb" is allowed to use).
423    
424     Setting "max_poll_time" to a non-zero value creates an overhead of
425     one syscall per request processed, which is not normally a problem
426     unless your callbacks are really really fast or your OS is really
427     really slow (I am not mentioning Solaris here). Using
428     "max_poll_reqs" incurs no overhead.
429    
430     Setting these is useful if you want to ensure some level of
431     interactiveness when perl is not fast enough to process all requests
432     in time.
433    
434     For interactive programs, values such as 0.01 to 0.1 should be fine.
435    
436 root 1.4 Example: Install an EV watcher that automatically calls BDB::poll_cb
437     with low priority, to ensure that other parts of the program get the
438     CPU sometimes even under high load.
439 root 1.3
440     # try not to spend much more than 0.1s in poll_cb
441     BDB::max_poll_time 0.1;
442    
443 root 1.4 my $bdb_poll = EV::io BDB::poll_fileno, EV::READ, \&BDB::poll_cb);
444 root 1.3
445     BDB::poll_wait
446     If there are any outstanding requests and none of them in the result
447     phase, wait till the result filehandle becomes ready for reading
448     (simply does a "select" on the filehandle. This is useful if you
449     want to synchronously wait for some requests to finish).
450    
451     See "nreqs" for an example.
452    
453     BDB::poll
454     Waits until some requests have been handled.
455    
456     Returns the number of requests processed, but is otherwise strictly
457     equivalent to:
458    
459     BDB::poll_wait, BDB::poll_cb
460    
461     BDB::flush
462 root 1.4 Wait till all outstanding BDB requests have been handled.
463 root 1.3
464     Strictly equivalent to:
465    
466     BDB::poll_wait, BDB::poll_cb
467     while BDB::nreqs;
468    
469 root 1.10 VERSION CHECKING
470     BerkeleyDB comes in various versions, many of them have minor
471     incompatibilities. This means that traditional "at least version x.x"
472     checks are often not sufficient.
473    
474     Example: set the log_autoremove option in a way compatible with <v.47
475     and v4.7. Note the use of & on the constants to avoid triggering a
476     compiletime bug when the symbol isn't available.
477    
478     $DB_ENV->set_flags (&BDB::LOG_AUTOREMOVE ) if BDB::VERSION v0, v4.7;
479     $DB_ENV->log_set_config (&BDB::LOG_AUTO_REMOVE) if BDB::VERSION v4.7;
480    
481     BDB::VERSION
482     The "BDB::VERSION" function, when called without arguments, returns
483     the Berkeley DB version as a v-string (usually with 3 components).
484     You should use "lt" and "ge" operators exclusively to make
485     comparisons.
486    
487     Example: check for at least version 4.7.
488    
489     BDB::VERSION ge v4.7 or die;
490    
491     BDB::VERSION min-version
492     Returns true if the BDB version is at least the given version
493     (specified as a v-string), false otherwise.
494    
495     Example: check for at least version 4.5.
496    
497     BDB::VERSION v4.7 or die;
498    
499     BDB::VERSION min-version, max-version
500     Returns true of the BDB version is at least version "min-version"
501     (specify "undef" or "v0" for any minimum version) and less then
502     "max-version".
503    
504     Example: check wether version is strictly less then v4.7.
505    
506     BDB::VERSION v0, v4.7
507     or die "version 4.7 is not yet supported";
508    
509 root 1.3 CONTROLLING THE NUMBER OF THREADS
510     BDB::min_parallel $nthreads
511 root 1.4 Set the minimum number of BDB threads to $nthreads. The current
512 root 1.3 default is 8, which means eight asynchronous operations can execute
513     concurrently at any one time (the number of outstanding requests,
514     however, is unlimited).
515    
516 root 1.4 BDB starts threads only on demand, when an BDB request is queued and
517 root 1.3 no free thread exists. Please note that queueing up a hundred
518     requests can create demand for a hundred threads, even if it turns
519     out that everything is in the cache and could have been processed
520     faster by a single thread.
521    
522     It is recommended to keep the number of threads relatively low, as
523     some Linux kernel versions will scale negatively with the number of
524     threads (higher parallelity => MUCH higher latency). With current
525     Linux 2.6 versions, 4-32 threads should be fine.
526    
527     Under most circumstances you don't need to call this function, as
528     the module selects a default that is suitable for low to moderate
529     load.
530    
531     BDB::max_parallel $nthreads
532 root 1.4 Sets the maximum number of BDB threads to $nthreads. If more than
533 root 1.3 the specified number of threads are currently running, this function
534     kills them. This function blocks until the limit is reached.
535    
536     While $nthreads are zero, aio requests get queued but not executed
537     until the number of threads has been increased again.
538    
539     This module automatically runs "max_parallel 0" at program end, to
540     ensure that all threads are killed and that there are no outstanding
541     requests.
542    
543     Under normal circumstances you don't need to call this function.
544    
545     BDB::max_idle $nthreads
546     Limit the number of threads (default: 4) that are allowed to idle
547     (i.e., threads that did not get a request to process within 10
548     seconds). That means if a thread becomes idle while $nthreads other
549     threads are also idle, it will free its resources and exit.
550    
551     This is useful when you allow a large number of threads (e.g. 100 or
552     1000) to allow for extremely high load situations, but want to free
553     resources under normal circumstances (1000 threads can easily
554     consume 30MB of RAM).
555    
556     The default is probably ok in most situations, especially if thread
557     creation is fast. If thread creation is very slow on your system you
558     might want to use larger values.
559    
560     $oldmaxreqs = BDB::max_outstanding $maxreqs
561     This is a very bad function to use in interactive programs because
562     it blocks, and a bad way to reduce concurrency because it is
563     inexact: Better use an "aio_group" together with a feed callback.
564    
565     Sets the maximum number of outstanding requests to $nreqs. If you to
566     queue up more than this number of requests, the next call to the
567     "poll_cb" (and "poll_some" and other functions calling "poll_cb")
568     function will block until the limit is no longer exceeded.
569    
570     The default value is very large, so there is no practical limit on
571     the number of outstanding requests.
572    
573     You can still queue as many requests as you want. Therefore,
574     "max_oustsanding" is mainly useful in simple scripts (with low
575     values) or as a stop gap to shield against fatal memory overflow
576     (with large values).
577    
578     BDB::set_sync_prepare $cb
579     Sets a callback that is called whenever a request is created without
580     an explicit callback. It has to return two code references. The
581 root 1.10 first is used as the request callback (it should save the return
582     status), and the second is called to wait until the first callback
583     has been called (it must set $! to the return status).
584    
585     This mechanism can be used to include BDB into other event
586     mechanisms, such as AnyEvent::BDB or Coro::BDB.
587    
588     The default implementation works like this:
589 root 1.3
590     sub {
591     my $status;
592     (
593     sub { $status = $! },
594     sub { BDB::poll while !defined $status; $! = $status },
595     )
596     }
597    
598 root 1.10 It simply blocks the process till the request has finished and then
599     sets $! to the return value. This means that if you don't use a
600     callback, BDB will simply fall back to synchronous operations.
601    
602 root 1.3 STATISTICAL INFORMATION
603     BDB::nreqs
604     Returns the number of requests currently in the ready, execute or
605     pending states (i.e. for which their callback has not been invoked
606     yet).
607    
608     Example: wait till there are no outstanding requests anymore:
609    
610     BDB::poll_wait, BDB::poll_cb
611     while BDB::nreqs;
612    
613     BDB::nready
614     Returns the number of requests currently in the ready state (not yet
615     executed).
616    
617     BDB::npending
618     Returns the number of requests currently in the pending state
619     (executed, but not yet processed by poll_cb).
620    
621     FORK BEHAVIOUR
622     This module should do "the right thing" when the process using it forks:
623    
624 root 1.4 Before the fork, BDB enters a quiescent state where no requests can be
625     added in other threads and no results will be processed. After the fork
626     the parent simply leaves the quiescent state and continues
627 root 1.3 request/result processing, while the child frees the request/result
628     queue (so that the requests started before the fork will only be handled
629     in the parent). Threads will be started on demand until the limit set in
630     the parent process has been reached again.
631    
632     In short: the parent will, after a short pause, continue as if fork had
633 root 1.4 not been called, while the child will act as if BDB has not been used
634     yet.
635 root 1.3
636 root 1.5 Win32 note: there is no fork on win32, and perls emulation of it is too
637     broken to be supported, so do not use BDB in a windows pseudo-fork,
638     better yet, switch to a more capable platform.
639    
640 root 1.3 MEMORY USAGE
641     Per-request usage:
642    
643     Each aio request uses - depending on your architecture - around 100-200
644     bytes of memory. In addition, stat requests need a stat buffer (possibly
645     a few hundred bytes), readdir requires a result buffer and so on. Perl
646     scalars and other data passed into aio requests will also be locked and
647     will consume memory till the request has entered the done state.
648    
649     This is not awfully much, so queuing lots of requests is not usually a
650     problem.
651    
652     Per-thread usage:
653    
654     In the execution phase, some aio requests require more memory for
655     temporary buffers, and each thread requires a stack and other data
656     structures (usually around 16k-128k, depending on the OS).
657    
658     KNOWN BUGS
659     Known bugs will be fixed in the next release, except:
660    
661     If you use a transaction in any request, and the request returns
662     with an operating system error or DB_LOCK_NOTGRANTED, the internal
663     TXN_DEADLOCK flag will be set on the transaction. See C<db_txn_finish>,
664     above.
665    
666     SEE ALSO
667 root 1.9 AnyEvent::BDB (event loop integration), Coro::BDB (more natural syntax),
668     IO::AIO (nice to have).
669 root 1.3
670     AUTHOR
671     Marc Lehmann <schmorp@schmorp.de>
672     http://home.schmorp.de/
673