Skip to content

This gem should help you integrate data from models of different Rails apps using Cassandra to replicate them.

Notifications You must be signed in to change notification settings

dtmtec/cassandra-integration

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cassandra Integration

This gem should help you integrate data from models of different Rails apps using Apache Cassandra to replicate them.

##References

Apache Cassandra Apache Cassandra - Wiki

##Installation

Include the gem in your Gemfile:

gem "cassandra_integration", :git => "git://github.com/dtmconsultoria/cassandra-integration.git"
bundle install

bundle exec rails generate cassandra_integration_config
#The generate command will create cassandra_integration.yml file on your config directory

cassandra_integration.yml

development:
    host: 192.168.0.1:9160
     keyspace: keyspace
     app_id: id_for_this_application
     other_apps_ids: id_for_other_app1,id_for_other_app2
     retries: 3
     timeout: 10
     connect_timeout: 20

##Quick Start

On Cassandra, you must create a ColumnFamily:

Attention for the last 3 column names. They are the apps identifiers configured on your cassandra_integration.yml

create column family your_column_famly_name WITH comparator = UTF8Type
   AND key_validation_class = UTF8Type
   AND column_metadata = [
           {column_name: name, validation_class: UTF8Type, index_type: KEYS},
           {column_name: birth_date, validation_class: UTF8Type},
           {column_name: mother_name, validation_class: UTF8Type},

           {column_name: id_for_this_application, validation_class: UTF8Type, index_type: KEYS},
           {column_name: id_for_other_app1, validation_class: UTF8Type, index_type: KEYS}
           {column_name: id_for_other_app2, validation_class: UTF8Type, index_type: KEYS}];

You must create a migration for each model you want to sync:

add_column :your_model_name, :cassandra_sync_identifier, :string

On each model:

class User < ActiveRecord::Base
  extend CassandraIntegration::Base

  #Here goes the ColumnFamily name used to sync this model data 
  self.cassandra_column_family = 'people'

  def to_cassandra_sync_identifier
    #Here goes your unique identifier for all systems
    #That will be the Cassandra's key identifier
    "#{name.parameterize}##{mother.parameterize}##{birthdate}"
  end

  #Here goes the fields you want to sync
  #The hash key is the column name on Cassandra and
  #the hash value is the attribute name on your model
  self.cassandra_columns_values_hash = {
    :name        => 'name',
    :mother_name => 'mother',
    :birth_date  => 'birthdate'
  }

end

About

This gem should help you integrate data from models of different Rails apps using Cassandra to replicate them.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages