= Mongoose 0.1.0 A database management system written in Ruby. It has an ActiveRecord-like interface, uses Skiplists for its indexing, and Marshal for its data serialization. I named it Mongoose, because, like Rudyard Kipling's Rikki-Tikki-Tavi, my aim is for it to be small, quick, and friendly. == Credits Thanks to Logan Capaldo for letting me steal a lot of the code from KirbyRecord. Thanks to Ezra Zygmuntowicz and Fabien Franzen, whose ez_where Rails plugin, provided much of the inspiration for the query language. Thanks to everyone who gave me feedback on KirbyBase. I have tried to put all the lessons learned from developing that library to good use here. == Installation Unpack the file you downloaded. Execute "ruby setup.rb". == Features * Pure Ruby, with no external dependencies. * ActiveRecord-like interface. * Fast queries on indexed fields (Up to 10x faster than KirbyBase). Indexes are Skiplists, which are just plain fun to play around with. * Not an in-memory database. Data is only read in from disk when needed and changes are immediately written out to disk. * In-memory indexes are initialized from dedicated index files, rather than rebuilt from scratch upon database initialization (like KirbyBase does). This can greatly reduce startup times. * Supports any datatype that Marshal supports. * Table relations supported via has_one, has_many. == Documentation Right now, documentation is a little light. It will get better. See the examples directory for examples of how to use Mongoose. Here's a quick tutorial: require 'mongoose' # Create a class for your table. class Plane < Mongoose::Table validates_presence_of :name, :speed end # Create a database instance. db = Mongoose::Database.new # Create new table. Notice how you specify whether a column is indexed or not. db.create_table(:plane) do |tbl| tbl.add_indexed_column(:plane_name, :string) tbl.add_column(:country, :string) tbl.add_indexed_column(:speed, :integer) tbl.add_column(:range, :integer) end # Add a record. rec = Plane.new rec.plane_name = 'P-51' rec.country = 'USA' rec.speed = 402 rec.range = 1205 rec.save # Various ways to find a record; should be familiar to ActiveRecord users. Plane.find(1) # Find record with id equal 1. Plane.find { |plane| plane.speed > 350 } # Find all planes with speed > 350. Plane.find # Find all records. Plane.find(:first) { |plane| plane.country == 'USA' } Plane.find do |plane| # Find all planes from either USA or plane.any do # Great Britain with speed > 400. plane.country == 'USA' plane.country == 'Great Britain' end plane.speed > 400 end # Delete a record. Plane.find(1).destroy == Manifest * README - this file * install.rb - install script * changes.txt - history of changes. * lib directory - dbms module * test directory - unit tests * examples directory - many example scripts demonstrating features. * images directory - images used in manual. == Author Written in 2006 by Jamey Cribbs == License Mongoose is distributed under the same license as Ruby. Copyright (c) 2006 Jamey Cribbs == Warranty THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. == Feedback Please send any bug reports, suggestions, ideas, improvements, to: jcribbs@netpromi.com == Home Page http://rubyforge.org/projects/mongoose/