[ANN] Mongoose 0.1.0

Discussion in 'Ruby' started by Jamey Cribbs, Jul 19, 2006.

  1. Jamey Cribbs

    Jamey Cribbs Guest

    Mongoose is 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.

    You can download it from: http://rubyforge.org/projects/mongoose/

    *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.

    *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 data type that Marshal supports.

    * Table relations supported via has_one, has_many.

    *Why?*
    -----------
    Well, I started to look into performance improvements for KirbyBase.
    One thing I noticed was that Ruby takes a comparatively long time
    converting strings to native data types like Integer, Time, etc. Since
    KirbyBase stores its records as strings, returning a large result set
    could take a long time. I found that if I Marshaled records before I
    wrote them to disk, a subsequent read of those records was significantly
    faster.

    About the same time, I read a paper about skiplists. A skiplist is a
    data structure that is relatively simple (compared to say a b-tree) to
    understand and implement in code. I was able to take the pseudo-code in
    the paper and implement a Ruby version in a couple of hours. Skiplists
    are pretty fast and since they are pretty easy to understand, I think
    there is good potential to tweak them. So, I wanted to try using
    skiplists for indexing rather than KirbyBase's array-based indexes.

    I started to retrofit both the Marshal serialization and Skiplists in
    KirbyBase, but quickly found that it was going to be more work than just
    starting over from scratch with a new design. Besides, I didn't want to
    radically change KirbyBase and piss off the current user base (both of
    you know who you are).

    So, I started from scratch. This also gave me the opportunity to make
    two other major changes. First of all, I wanted to keep the query
    language as close to KirbyBase's as possible (i.e. Ruby blocks), but I
    wanted more control over the query expression. I took the opportunity
    to borrow a lot of idea's from Ezra's ez_where plugin. I think this
    will give me the capability down the road to tweak the query engine,
    based on the query itself.

    The second thing I changed was that I have finally seen the light about
    ActiveRecord, so I stole pretty much all of Logan's KirbyRecord code to
    give Mongoose an ActiveRecord-like api.

    The end result of all of this (I hope) is a database management system
    that is small, easy to use, and fast.

    *What about KirbyBase?*
    ------------------------------------
    KirbyBase is not going anywhere. I still plan on supporting it into the
    foreseeable future. However, I imagine that most new development will
    be directed at Mongoose.
    Jamey Cribbs, Jul 19, 2006
    #1
    1. Advertising

  2. On Jul 19, 2006, at 8:41 AM, Jamey Cribbs wrote:

    > Mongoose is 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.
    >
    > You can download it from: http://rubyforge.org/projects/mongoose/
    >
    > *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.
    >
    >


    Jamey-

    This looks awesome! I totally have a few good uses for this. I will
    be playing with this and giving you feedback and maybe a few patches
    as i get familiar with it.

    Thanks Jamey!

    -Ezra
    Ezra Zygmuntowicz, Jul 19, 2006
    #2
    1. Advertising

  3. On Jul 19, 2006, at 10:41 AM, Jamey Cribbs wrote:

    > Mongoose is 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.


    This really interesting stuff Jamey. Thanks for sharing!

    James Edward Gray II
    James Edward Gray II, Jul 19, 2006
    #3
  4. On 7/19/06, Jamey Cribbs <> wrote:
    > Mongoose is 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.
    >


    Great job!
    --
    Michel
    Michel Martens, Jul 19, 2006
    #4
  5. Jamey Cribbs

    Jamey Cribbs Guest

    Ezra Zygmuntowicz wrote:
    > Jamey-
    >
    > This looks awesome! I totally have a few good uses for this. I
    > will be playing with this and giving you feedback and maybe a few
    > patches as i get familiar with it.


    Thank *you* for ez_where! I have to admit that, even though I looked at
    your code, I still couldn't totally wrap my head around how you had made
    some of the ez_where magic happen. So, if you do get a chance to look
    at my query code and give me any pointers on what I could do better,
    that would be great.

    Jamey
    Jamey Cribbs, Jul 20, 2006
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Follower
    Replies:
    0
    Views:
    320
    Follower
    May 7, 2004
  2. Jamey Cribbs

    [ANN] Mongoose 0.1.1

    Jamey Cribbs, Jul 20, 2006, in forum: Ruby
    Replies:
    0
    Views:
    89
    Jamey Cribbs
    Jul 20, 2006
  3. Jamey Cribbs

    [ANN] Mongoose 0.2.0

    Jamey Cribbs, Jul 21, 2006, in forum: Ruby
    Replies:
    17
    Views:
    205
    Bob Hutchison
    Jul 24, 2006
  4. Jamey Cribbs
    Replies:
    19
    Views:
    261
    Mike Harris
    Jul 28, 2006
  5. Replies:
    4
    Views:
    623
    red floyd
    Jul 17, 2012
Loading...

Share This Page