Skip to content

Latest commit

 

History

History
133 lines (91 loc) · 2.87 KB

README.md

File metadata and controls

133 lines (91 loc) · 2.87 KB

Cassie Connection Handling

Cassie provides cluster and session connection handling that adheres to cassandra-driver best practices:

  • Maintains 1 Cassandra::Cluster instance
  • Maintains 1 Cassandra::Session per keyspace (or less)

Cassie also provides a Connection module to allow easy integration of connection handling into application classes.

Core functionality

Cassie extends ConnectionHandler, providing functionality to act as a connection handler using its configuration and keyspace attributes.

Cassie.cluster
=> #<Cassandra::Cluster:0x3fec245dceb0> # <= cluster instance configured according to `Cassie::configuration`

Cassie.keyspace
=> "default_keyspace"

Cassie.session
=> #<Cassandra::Session:0x3fec24b13668>

Cassie.session(nil)
=> #<Cassandra::Session:0x3fec24b339b8>

Cassie.session('my_other_keyspace')
=> #<Cassandra::Session:0x3fec24b558a8>

Cassie.sessions
=> {
    "default_keyspace"=>#<Cassandra::Session:0x3fec24b13668>,
    ""=>#<Cassandra::Session:0x3fec24b13668>,
    "my_other_keyspace" >#<Cassandra::Session:0x3fec24b558a8>
   }

# Future session retrieval reuses previously connected sessions
Cassie.session
=> #<Cassandra::Session:0x3fec24b13668>

Cassie.sessions
=> {
    "default_keyspace"=>#<Cassandra::Session:0x3fec24b13668>,
    ""=>#<Cassandra::Session:0x3fec24b13668>,
    "my_other_keyspace" >#<Cassandra::Session:0x3fec24b558a8>
   }

Mixin functionality

Including Connection gives convenience accessors that allow overriding and fallback behavior.

class HelpfulCounter
  include Cassie::Connection

  def user_count
    session.execute('SELECT count(*) FROM users WHERE id = ?;').rows.first['count']
  end
end

Ignoring the likely irresponsible example query used. The object falls back to using the Cassie::keyspace value by default.

Cassie.keyspace
=> "default_keyspace"

object = HelpfulCounter.new

object.keyspace
=> "default_keyspace"

object.user_count
=> 302525

Connection options follow the following lookup path:

  1. the object instance value
  2. the class instance value
  3. the Cassie instance value
  4. the Cassie::configuruation[:option] value
  5. the Cassandra::cluster value (default cassandra driver value)
Examples:
Set at the class level:
class Analytics::HelpfulCounter
  include Cassie::Connection

  keyspace :analytics_keyspace

  def user_count
    session.execute('SELECT count(*) FROM users WHERE id = ?;').rows.first['count']
  end
end

Cassie.keyspace
=> "default_keyspace"

object = Analytics::HelpfulCounter.new

object.keyspace
=> :analytics_keyspace

object.user_count
=> 300715
Set at the object level:
Cassie.keyspace
=> "default_keyspace"

object = HelpfulCounter.new

object.keyspace
=> "default_keyspace"

object.user_count
=> 302525

object.keyspace = "analytics_keyspace"
=> "analytics_keyspace"

object.user_count
=> 300715