summaryrefslogtreecommitdiff
path: root/qdbm/misc/index.html
blob: 7a5271c3883eb8f843173279be9a3e3863f4f1aa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<meta name="author" content="Mikio Hirabayashi" />
<link rel="contents" href="./" />
<link rel="icon" href="icon16.png" />
<link rev="made" href="mailto:mikio@users.sourceforge.net" />
<title>QDBM: Quick Database Manager</title>
<style type="text/css">html { margin: 0em 0em; padding: 0em 0em; background: #eeeeee none; }
body { margin: 2em 2em; padding: 0em 0em;
  background: #eeeeee none; color: #111111;
  font-style: normal; font-weight: normal; }
h1 { margin-top: 1.8em; margin-bottom: 1.3em; font-weight: bold; }
h2 { margin-top: 1.8em; margin-bottom: 1.1em; font-weight: bold;
  border-left: solid 0.6em #445555; border-bottom: solid 1pt #bbbbbb;
  padding: 0.5em 0.5em; width: 60%; }
h3 { margin-top: 1.8em; margin-bottom: 0.8em; font-weight: bold; }
hr { margin-top: 2.5em; margin-bottom: 1.5em; height: 1pt;
  color: #999999; background-color: #999999; border: none; }
div.note,div.navi { text-align: right; }
div.logo { text-align: center; margin: 3em 0em; }
div.logo img { border: inset 2pt #ccccdd; }
p { margin: 0.8em 0em; line-height: 140%; }
p,dd { text-indent: 0.8em; }
div,pre { margin-left: 1.7em; margin-right: 1.7em; }
pre { background-color: #ddddee; padding: 0.2em; border: 1pt solid #bbbbcc; font-size: smaller; }
kbd { color: #111111; font-style: normal; font-weight: bold; }
a { color: #0022aa; text-decoration: none; }
a:hover,a:focus { color: #0033ee; text-decoration: underline; }
a.head { color: #111111; text-decoration: none; }
table { padding: 1pt 2pt 1pt 2pt; border: none; margin-left: 1.7em; border-collapse: collapse; }
th { padding: 1pt 4pt 1pt 4pt; border-style: none;
  text-align: left; vertical-align: bottom; }
td { padding: 1pt 4pt 1pt 4pt; border: 1pt solid #333333;
  text-align: left; vertical-align: top; }
ul,ol,dl { line-height: 140%; }
dt { margin-left: 1.2em; }
dd { margin-left: 2.0em; }
ul.lines { list-style-type: none; }
@media print {
  html,body { margin: 0em 0em; background-color: #ffffff; color: #000000; }
  h1 { padding: 8em 0em 0.5em 0em; text-align: center; }
  h2 { page-break-before: always; }
  div.note { text-align: center; }
  div.navi,div.logo { display: none }
  hr { display: none; }
  pre { margin: 0.8em 0.8em; background-color: #ffffff;
    border: 1pt solid #aaaaaa; font-size: smaller; }
  a,kbd { color: #000000; text-decoration: none; }
  h1,h2,h3 { font-family: sans-serif; }
  p,div,li,dt,dd { font-family: serif; }
  pre,kbd { font-family: monospace; }
  dd { font-size: smaller; }
}
</style>
<script type="text/javascript">function startup(){
  var elem = document.getElementById("headline");
  if(elem){
    var now = new Date();
    if((now.getFullYear() + now.getMonth() + now.getDate() + now.getHours()) % 4 == 0){
      var text;
      switch((now.getMonth() + now.getDate() + now.getMinutes()) % 10){
      default: text = "QDBM: Quicker Database Manager"; break;
      case 1: text = "QDBM: Quantumtheoretically Dangerous Blast Machine"; break;
      case 3: text = "QDBM: Quite Dramatic Body Metabolism"; break;
      case 5: text = "QDBM: Quality Documentation of Black Market"; break;
      case 7: text = "QDBM: Quake Damage Between Mountains"; break;
      case 9: text = "QDBM: Quiet Down Before Millennium"; break;
      }
      elem.firstChild.nodeValue = text;
    }
  }
}
</script>
</head>

<body onload="startup();">

<h1 id="headline">QDBM: Quick Database Manager</h1>

<div class="note">Copyright (C) 2000-2007 Mikio Hirabayashi</div>
<div class="note">Last Update: Thu, 26 Oct 2006 15:00:20 +0900</div>
<div class="navi">[<span class="void">English</span>/<a href="index.ja.html" hreflang="ja">Japanese</a>]</div>

<div class="logo"><img src="logo.png" alt="QDBM" width="300" height="110" /></div>

<hr />

<h2>Overview</h2>

<p>QDBM is a library of routines for managing a database.  The database is a simple data file containing records, each is a pair of a key and a value.  Every key and value is serial bytes with variable length.  Both binary data and character string can be used as a key and a value.  There is neither concept of data tables nor data types.  Records are organized in hash table or B+ tree.</p>

<p>As for database of hash table, each key must be unique within a database, so it is impossible to store two or more records with a key overlaps.  The following access methods are provided to the database: storing a record with a key and a value, deleting a record by a key, retrieving a record by a key.  Moreover, traversal access to every key are provided, although the order is arbitrary.  These access methods are similar to ones of DBM (or its followers: NDBM and GDBM) library defined in the UNIX standard.  QDBM is an alternative for DBM because of its higher performance.</p>

<p>As for database of B+ tree, records whose keys are duplicated can be stored.  Access methods of storing, deleting, and retrieving are provided as with the database of hash table.  Records are stored in order by a comparing function assigned by a user.  It is possible to access each record with the cursor in ascending or descending order.  According to this mechanism, forward matching search for strings and range search for integers are realized.  Moreover, transaction is available in database of B+ tree.</p>

<p>QDBM is written in C, and provided as APIs of C, C++, Java, Perl, and Ruby.  QDBM is available on platforms which have API conforming to POSIX.  QDBM is a free software licensed under the GNU Lesser General Public License.</p>

<hr />

<h2>Documents</h2>

<p>The following are documents of QDBM.  They are contained also in the source package.</p>

<ul>
<li><a href="spex.html">Fundamental Specifications</a></li>
<li><a href="xspex.html">Specifications of C++ API</a></li>
<li><a href="jspex.html">Specifications of Java API</a></li>
<li><a href="plspex.html">Specifications of Perl API</a></li>
<li><a href="rbspex.html">Specifications of Ruby API</a></li>
<li><a href="cgispex.html">Specifications of CGI scripts</a></li>
</ul>

<hr />

<h2>Packages</h2>

<p>The following are packages of QDBM.  The Linux binary package contains APIs for C, C++, and Java.  It contains CGI scripts also.  The Windows binary package contains APIs for C and Java.  It contains CGI scripts also.</p>

<ul>
<li><a href="qdbm-1.8.77.tar.gz">Latest Source Package (version 1.8.77)</a></li>
</ul>

<ul>
<li><a href="past/">Past Versions</a></li>
<li><a href="rpm/">RPM Binary Packages for Linux</a></li>
<li><a href="win/">Binary Packages for Windows</a></li>
<li><a href="misc/">Related Packages</a></li>
</ul>

<ul>
<li><a href="http://www.freshports.org/databases/qdbm/">Binary Packages for FreeBSD</a></li>
<li><a href="http://www.blastwave.org/packages.php/qdbm">Binary Packages for Solaris</a></li>
<li><a href="http://hpux.cs.utah.edu/hppd/cgi-bin/search?package=on&amp;description=on&amp;term=qdbm&amp;Search=Search">Binary Packages for HP-UX</a></li>
<li><a href="http://www.sbellon.de/sw-ports.html">Binary Packages for RISC OS</a></li>
</ul>

<hr />

<h2>Applications</h2>

<p>The following are links to applications of QDBM.  If you run or find a project using QDBM, please tell it, and it will added to this list.</p>

<ul>
<li><a href="http://hyperestraier.sourceforge.net/">Hyper Estraier</a> : Full-text Search System for Communities written by Mikio Hirabayashi</li>
<li><a href="http://estraier.sourceforge.net/">Estraier</a> : Personal Full-text Search System written by Mikio Hirabayashi</li>
<li><a href="http://diqt.sourceforge.net/">Diqt</a> : Multilingual Dictionary Searcher written by Mikio Hirabayashi</li>
<li><a href="http://rbbs.sourceforge.jp/">RBBS</a> : WWW-based Bulletin Board System written by Mikio Hirabayashi</li>
<li><a href="http://harvest.sourceforge.net/">Harvest</a> : Distributed Search System written by Kang-Jin Lee et al</li>
<li><a href="http://bogofilter.sourceforge.net/">Bogofilter</a> : Bayesian Spam Mail Filter written by Eric S. Raymond et al</li>
<li><a href="http://www.foo.be/mqs/">MQS</a> : Minimalist Queue Services written by Alexandre Dulaunoy</li>
<li><a href="http://www.zedshaw.com/projects/ruby_odeum/">Ruby/Odeum</a> : Ruby Binding to the Inverted API written by Zed A. Shaw</li>
<li><a href="http://www.surfulater.com/">Surfulater</a> : Utility to Save and Organize Web Pages written by Soft As it Gets Pty Ltd</li>
<li><a href="http://mutt-ng.berlios.de/">Mutt-NG</a> : Text Based Mail Client written by Andreas Krennmair et al</li>
<li><a href="http://smfs.sourceforge.net/">SMFS</a> : Smart Sendmail Filters written by Eugene Kurmanin</li>
<li><a href="http://dixit.sourceforge.net/">Dixit</a> : Romanian Dictionary Searcher written by Octavian Procopiuc</li>
</ul>

<hr />

<h2>Brothers</h2>

<p>There are many followers of UNIX DBM.  Select the best suited one for your products.  NDBM is ancient and you should not use it.  SDBM is maintained by Apache Project, and GDBM is maintained by GNU Project.  They are most popular and time-tested.  TDB is maintained by Samba Team.  It allows multiple simultaneous writers.  While CDB does not support updating at a runtime, it is the fastest.  Berkeley DB is very multifunctional and ACID compliant.  It is used in many commercial products.  Finally, QDBM is balanced of performance, functionality, portability, and usability.</p>

<ul>
<li><a href="bros/ndbm-bsd-5.1.m1.tar.gz">NDBM</a> : New DBM written by BSD</li>
<li><a href="bros/sdbm-1.0.2.tar.gz">SDBM</a> : Substitute DBM written by Ozan S. Yigit</li>
<li><a href="bros/gdbm-1.8.3.tar.gz">GDBM</a> : GNU Database Manager written by Philip A. Nelson et al</li>
<li><a href="bros/tdb-1.0.6.tar.gz">TDB</a> : Trivial Database written by Andrew Tridgell et al</li>
<li><a href="bros/tinycdb-0.75.tar.gz">TinyCDB</a> : Constant Database written by Michael Tokarev</li>
<li><a href="bros/db-4.4.20.tar.gz">Berkeley DB</a> : Berkeley DB written by Sleepycat Software</li>
</ul>

<ul>
<li><a href="benchmark.pdf">Report of Benchmark Test</a></li>
<li><a href="http://tokyocabinet.sourceforge.net/">Tokyo Cabinet</a> : the successor of QDBM</li>
</ul>

<hr />

<h2>Information</h2>

<p>QDBM was written by <a href="http://qdbm.sourceforge.net/mikio/">Mikio Hirabayashi</a>.  You can contact the author by e-mail to `mikio@users.sourceforge.net'.  However, as for topics which can be shared among other users, pleae send it to the mailing list.  To join the mailing list, refer to `<a href="http://lists.sourceforge.net/lists/listinfo/qdbm-users">http://lists.sourceforge.net/lists/listinfo/qdbm-users</a>'.</p>

<p>The project page on SourceForge.net is `<a href="http://sourceforge.net/projects/qdbm/">http://sourceforge.net/projects/qdbm/</a>'.</p>

<p>Update of this project is announced on Freshmeat.net at `<a href="http://freshmeat.net/projects/qdbm/">http://freshmeat.net/projects/qdbm/</a>'.</p>

<hr />

</body>

</html>

<!-- END OF FILE -->