QDBM_File - Tied access to Quick Database Manager
use QDBM_File; # hash db [$db =] tie %hash, 'QDBM_File', $filename, [$flags, $mode, $buckets]; [$db =] tie %hash, 'QDBM_File::Multiple', $filename, [$flags, $mode, $buckets, $directories]; [$db =] tie %hash, 'QDBM_File::Multiple::LOB', $filename, [$flags, $mode, $buckets, $directories]; # b+tree # $compare_sub example: sub { $_[0] cmp $_[1] } [$db =] tie %hash, 'QDBM_File::BTree', $filename, [$flags, $mode, $compare_sub]; [$db =] tie %hash, 'QDBM_File::BTree::Multiple', $filename, [$flags, $mode, $compare_sub]; # inverted index $db = QDBM_File::InvertedIndex->new($filename, [$flags]); # hash db, btree, inverted index common api $int = $db->get_size(); $name = $db->get_name(); $int = $db->get_mtime(); $bool = $db->sync(); $bool = $db->optimize([$buckets]); $bool = $db->iterator_init(); $bool = $db->is_writable(); $bool = $db->is_fatal_error(); # hash db, btree common api $bool = $db->STORE($key, $value, [$overlap_flags]); $int = $db->get_record_size($key); $int = $db->count_records(); $bool = $class->repair($filename); $bool = $db->export_db($filename); $bool = $db->import_db($filename); # hash db only $bool = $db->set_align($align); $bool = $db->set_fbp_size($size); $int = $db->count_buckets(); $int = $db->count_used_buckets(); # Large Object: QDBM_File::Multiple only $bool = $db->store_lob($key, $value, [$overlap_flags]); $value = $db->fetch_lob($key); $bool = $db->delete_lob($key); $bool = $db->exists_lob($key); $int = $db->count_lob_records(); # btree only $bool = $db->store_list($key, @values); @values = $db->fetch_list($key); $bool = $db->delete_list($key); $int = $db->count_match_records($key); $int = $db->count_leafs(); $int = $db->count_non_leafs(); $bool = $db->move_first(); $bool = $db->move_last(); $bool = $db->move_next(); $bool = $db->move_prev(); $bool = $db->move_forward($key); $bool = $db->move_backword($key); $key = $db->get_current_key(); $value = $db->get_current_value(); $bool = $db->store_current($value); $bool = $db->store_after($value); $bool = $db->store_before($value); $bool = $db->delete_current($value); $bool = $db->begin_transaction(); $bool = $db->commit(); $bool = $db->rollback(); $db->set_tuning( $max_leaf_record, $max_non_leaf_index, $max_cache_leaf, $max_cache_non_leaf ); # DBM_Filter $old_filter = $db->filter_store_key ( sub { ... } ); $old_filter = $db->filter_store_value( sub { ... } ); $old_filter = $db->filter_fetch_key ( sub { ... } ); $old_filter = $db->filter_fetch_value( sub { ... } ); untie %hash; # inverted index api $doc = $class->create_document($uri); $bool = $db->store_document($doc, $max_words, $is_overwrite); $doc = $db->get_document_by_uri($uri); $doc = $db->get_document_by_id($id); $id = $db->get_document_id($uri); $bool = $db->delete_document_by_uri($uri); $bool = $db->delete_document_by_id($id); $bool = $db->exists_document_by_uri($uri); $bool = $db->exists_document_by_id($id); $doc = $db->get_next_document(); @id = $db->search_document($word); $int = $db->search_document_count($word); $bool = $class->merge($filename, @filenames); %score = $db->get_scores($doc, $max); $db->set_tuning( $index_buckets, $inverted_index_division_num, $dirty_buffer_buckets, $dirty_buffer_size ); $db->set_char_class($space, $delimiter, $glue); @appearance_words = $db->analyze_text($text); @appearance_words = $class->analyze_text($text); $normalized_word = $class->normalize_word($word); @id = $db->query($query); # document api $doc = QDBM_File::InvertedIndex::Document->new($uri); $doc->set_attribute($name, $value); $value = $doc->get_attribute($name); $doc->add_word($normalized_word, $appearance_word); $uri = $doc->get_uri(); $id = $doc->get_id(); @normalized_words = $doc->get_normalized_words(); @appearance_words = $doc->get_appearance_words(); %score = $doc->get_scores($max, [$db]);
QDBM_File is a module which allows Perl programs to make use of the facilities provided by the qdbm library. If you use this module, you should read QDBM manual pages.
Quick Database Manager is a high performance dbm library maintained by Mikio Hirabayashi. QDBM_File provides various API, Depot, Curia, Villa, Vista and Odeum. Documents are available at http://qdbm.sourceforge.net/
QDBM_File exports these overlap flags:
Means the specified value overwrites the existing one.
Means the existing value is kept.
Means the specified value is concatenated at the end of the existing value.
Means duplication of keys is allowed and the specified value is added as the last one. It is BTree interface only.
Means duplication of keys is allowed and the specified value is added as the first one. It is BTree interface only.
TIEHASH interface is similar to other xDBM_File.
use Fcntl; use QDBM_File; my %hash; my $filename = "filename"; my $db = tie %hash, "QDBM_File", $filename, O_RDWR|O_CREAT, 0644; $hash{"key"} = "value";
Hash db has optional argument $buckets, specifies bucket number of db, and Q::Multiple has $directories, specifies division number of directory.
Q::BTree has $compare_sub, used for key comparison. It must return -1 or 0 or 1. If $compare_sub is omitted, dictionary order is used.
sub { $_[0] cmp $_[1] } # ordered by dictionary sub { $_[0] <=> $_[1] } # ordered by number
If using STORE as method, $overlap_flags can be used. If omitted, QD_OVER is used.
$db->STORE("key", "balue", QD_CAT);
Toshiyuki Yamato, <toshiyuki.yamato at gmail.com>
<toshiyuki.yamato at gmail.com>
Currently umask flags is ignored implicitly, 0644 is always used. It is used for other xDBM_File compatibility.
QDBM_File::Multiple::LOB is tied interface wrapper of store_lob, fetch_lob, exists_lob, delete_lob. When using LOB, empty key can not be used, and traversal access (keys, values, each) is not available. It is a little inconvenient, so I recommend using QDBM_File::Multiple and xxxxx_lob api directly.
DB_File(3), perldbmfilter.
Copyright 2007 Toshiyuki Yamato, all rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
To install QDBM_File, copy and paste the appropriate command in to your terminal.
cpanm
cpanm QDBM_File
CPAN shell
perl -MCPAN -e shell install QDBM_File
For more information on module installation, please visit the detailed CPAN module installation guide.