Column-oriented Data Mapping for Ruby on Rails
Clone or download
Failed to load latest commit information.


Bigrecord Suite

A Ruby Object/Data Mapper for distributed column-oriented data stores (inspired by BigTable) such as HBase. Intended to work as a drop-in for Rails applications.


  • Dynamic schemas (due to the schema-less design of BigTable).

  • Support for column-oriented data stores.

  • Similar usage to Active Record.

  • Embedded records that store within a single table row.

  • Automatic versioning.

  • Scalability (depending on the data store used).


BigTable, and by extension, Bigrecord isn't right for everyone. A great introductory article discussing this topic can be found at explaining why you would or wouldn't use BigTable. The rule of thumb, however, is that if your data model is simple or can fit into a standard RDBMS, then you probably don't need it.

Beyond this though, there are two basic motivations that almost immediately demand a BigTable model database:

  1. Your data is highly dynamic in nature and would not fit in a schema bound model, or you cannot define a schema ahead of time.

  2. You know that your database will grow to tens or hundreds of gigabytes, and can't afford big iron servers. Instead, you'd like to scale horizontally across many commodity servers.


  • Bigrecord: Ruby Object/Data Mapper. Inspired and architected similarly to Active Record.

Optional Component

  • Bigrecord Driver: Consists of a JRuby server component that bridges Ruby and Java (through the DRb protocol) to interact with Java-based data stores and their native APIs. Clients that connect to the DRb server can be of any Ruby type (JRuby, MRI, etc). Currently, this is used only for HBase to serve as a connection alternative to Thrift or Stargate. This application can be run from a separate server than your Rails application.

  • Bigindex []: Due to the nature of BigTable databases, some limitations are present while using Bigrecord standalone when compared to Active Record. Some major limitations include the inability to query for data other than with the row ID, indexing, searching, and dynamic finders (find_by_attribute_name). Since these data access patterns are vital for most Rails applications to function, Bigindex was created to address these issues, and bring the feature set more up to par with Active Record. Please refer to the Bigindex package for more information and its requirements.

Getting Started

Please refer to each component's own documentation for more information on getting started!


Big Record is released under the MIT license.