OSDN: Open Source Development Network | US Disaster Support · Newsletters · Jobs |
|
Sat, Oct 06th | home | browse | articles | contact | chat | submit | faq | newsletter | about | stats | scoop | 17:13 EDT |
not logged in « register « lost password « |
|
add comment |
|
Non-SQL Databases for Linux
The best-known databases these days are based on SQL, but are often overkill for what you need to do. This review discusses lighterweight alternatives, including xBase, DBM, and ISAM systems. Copyright notice: All reader-contributed material on freshmeat.net is the property and responsibility of its author; for reprint rights, please contact the author directly. xBase DescendantsBack in the 1970s, a database system was released for the CP/M operating system called Vulcan. Ashton Tate bought the rights to it, and renamed it dBase. It went through a number of iterations and version numbers, and a number of companies produced "clones". The architecture was interesting; it combines these features:
Using all of this, you can build quite powerful interactive applications to work with a set of database tables. In the early days, the tools for building "forms" were somewhat primitive (they got more sophisticated over time). In those days, personal computers were not connected to networks, so programs were inherently single-user-oriented. When PCs started getting networked together, locking schemes were introduced to allow use by multiple concurrent users. Much later, an ANSI committee, X319J, created a common "dialect" called xBase, trying to unify the functionality of notable commercial implementations such as dBase, Clipper, and FoxBase, with the result that it is typical to call these sorts of database systems "xBase systems". Early implementations functioned as file-based systems, that is, programs accessed data through the OS filesystem, in which each table and index is represented as a file. This approach doesn't scale very well from the perspectives of either reliability (because any program on the system that accesses a table file has the ability to "muss it up") or scalability (because every program that accesses the database has to manage locks itself). Some implementations have become available that have a central database manager process, as is common with SQL databases. Furthermore, SQL interpreters have sometimes been added to the set of tools, so "xBase systems" are sometimes really SQL systems. Various xBase implementations are available for Linux:
General xBase Documentation
Keyed Table Systems like DBMAt the "lowest level", there are quite a number of data storage systems that don't try to be terribly abstract, or to provide a complete "application environment". The characteristic example is the Unix DBM scheme, which provides a set of C function calls that allow you to store values -- associated with keys -- into a data file. If your data storage needs are simple, it may not make sense to pull in the full sophistication of an SQL system. Furthermore, the "serious database" systems typically tend to require some administration effort, often including setting up server processes, user authentication, and the likes. If you have an application that merely needs to "store some data", a DBM-like system may be all you need. Some SQL database systems are (or have been) based on these sorts of libraries. For instance, Informix implemented a C-based ISAM library that was often embedded in applications; the Informix SE SQL database system was implemented on top of that, as tables were represented as ISAM tables. There are a couple of SQL databases that have been built atop DBM. One of the most interesting examples is that "transactions" were brought to MySQL when they attached it to Berkeley DB, a modern version of DBM that supports transactions and storage of multiple "tables" within a single data file. The major families of these databases include:
These systems tend to be highly API-oriented; while an SQL database often provides a lot of generic tools for building queries, and you tend to describe your query, these sorts of databases almost always require writing programs to "walk" through the data. DBM-Like DatabasesLinux systems almost always include some set of NDBM, the "New" DBM implementation, SDBM, ODBM, and GDBM, the "GNU" implementation. The typical API looks like:
DBM *dbm_open(char *, int, int); void dbm_close(DBM *); datum dbm_fetch(DBM *, datum); datum dbm_firstkey(DBM *); datum dbm_nextkey(DBM *); int dbm_delete(DBM *, datum); int dbm_store(DBM *, datum, datum, int); The Perl language popularized the idea of tying DBM tables to Perl
associative arrays, with the result that in Perl, once you tie a name
to a DBM file, you can transparently use ordinary assignments like
The Python AnyDBM_File documentation page describes some of the similarities and differences between different DBM implementations.
ISAM DatabasesThese systems are often embedded inside applications.
Notice that many of the vendors of ISAM-like systems also sell SQL databases; once you've got the low level library to store and retrieve data, it is pretty natural to build further layers of abstraction on top of that, such as SQL interpreters. That brings us full circle back to SQL, where we started. Author's bio: During his University years, Christopher Browne was employed by three public accounting firms as a student in accounts, preparing many sets of tax returns and financial statements. As a result, he decided he definitely didn't want to be an accountant or an auditor, but he's used his knowledge to pursue a career in programming financial systems. He has done more writing in recent years, publishing several articles and co-authoring the book Professional Linux Programming. T-Shirts and Fame! We're eager to find people interested in writing articles on software-related topics. We're flexible on length, style, and topic, so long as you know what you're talking about and back up your opinions with facts. Anyone who writes an article gets a freshmeat t-shirt from ThinkGeek in addition to 15 minutes of fame. If you think you'd like to try your hand at it, let jeff.covey@freshmeat.net know what you'd like to write about.
Topic :: Database
The Harbour Project - An open source, cross platform xbase compiler
[»] Another one Another one for indexing constant data, similar to CDB, is PureDB .
-- [»] Another one Another one for indexing constant data, similar to CDB, is PureDB .
-- [»] DynDB I'm awfully sorry for the double post ("reload" did the trick).
-- [»] Another missing category
Pliant is implementing a completely different database engine. See Pliant project at http://pliant.cx/ for extra details.
|