:warning: The Ruby driver is in maintenance mode. We are still accepting pull-requests and we will occasionally release critical bug fixes, but no ongoing active development is being done currently.
If you're reading this on GitHub, please note that this is the readme for the development version and that some features described here might not yet have been released. You can view the documentation for the latest released version here.
A Ruby client driver for Apache Cassandra. This driver works exclusively with the Cassandra Query Language version 3 (CQL3) and Cassandra's native protocol.
Use the Ruby DSE driver for better compatibility and support for DataStax Enterprise.
#datastax-drivers
channel at https://academy.datastax.com/slackThis driver is based on the cql-rb gem by Theo Hultberg and we added support for:
Check out the slides from Ruby Driver Explained for a detailed overview of the Ruby Driver architecture.
This driver works exclusively with the Cassandra Query Language v3 (CQL3) and Cassandra's native protocol. The current version works with:
Note: Rubinius is not supported.
Note: Big-endian systems are not supported.
require 'cassandra'
cluster = Cassandra.cluster # connects to localhost by default
cluster.each_host do |host| # automatically discovers all peers
puts "Host #{host.ip}: id=#{host.id} datacenter=#{host.datacenter} rack=#{host.rack}"
end
keyspace = 'system_schema'
session = cluster.connect(keyspace) # create session, optionally scoped to a keyspace, to execute queries
future = session.execute_async('SELECT keyspace_name, table_name FROM tables') # fully asynchronous api
future.on_success do |rows|
rows.each do |row|
puts "The keyspace #{row['keyspace_name']} has a table called #{row['table_name']}"
end
end
future.join
Note: The host you specify is just a seed node, the driver will automatically discover all peers in the cluster.
Read more:
Install via rubygems
gem install cassandra-driver
Install via Gemfile
gem 'cassandra-driver'
Note: if you want to use compression you should also install snappy or lz4-ruby. Read more about compression.
Some of the new features added to the driver have unfortunately led to changes in the original cql-rb API. In the examples directory, you can find an example of how to wrap the ruby driver to achieve almost complete interface parity with cql-rb to assist you with gradual upgrade.
If you are upgrading to DataStax Enterprise, use the Ruby DSE driver for more features and better compatibility.
This minor release adds support for MRI 2.4.x and also contains a few miscellaneous defect fixes. It also removes support for Ruby versions prior to 2.2. This was already officially the case, but the minimum version limit is now enforced.
See the changelog for more information on all changes in this version and past versions.
This minor release introduces features and fixes around resiliency, schema metadata, usability, and performance. One of the most user-impacting of these is the introduction of execution profiles. Execution profiles allow you to group various execution options into a 'profile' and you reference the desired profile at execution time. Get the scoop here.
Cassandra::Date
) and time (Cassandra::Time
) data types.Cassandra::Table
object to expose many more attributes: id
, options
, keyspace
, partition_key
, clustering_columns
, and clustering_order
. This makes it significantly easier to write administration scripts that report various attributes of your schema, which may help to highlight areas for improvement.Cassandra::Retry::Policy#try_next_host
.idempotent
option when executing.payload
option.Cassandra::Execution::Info
instances.Cassandra::Execution::Info
instances.connections_per_local_node
, connections_per_remote_node
, requests_per_connection
cluster configuration options to tune parallel query execution and resource usage.Cassandra::Logger
class to make it easy for users to enable debug logging in the client.protocol_version
configuration option to allow the user to force the protocol version to use for communication with nodes.ReadError
, WriteError
, and FunctionCallError
Cassandra error responses introduced in Cassandra 2.2.DseAuthenticator
, configured for LDAP).Cassandra::Future#get
.Cassandra::Future#join
is now an alias to Cassandra::Future#get and will raise an error if the future is resolved with one.Cassandra::Session#execute*
or when creating a Cassandra::Statement
object. Cassandra::Statements::Batch#add
and Cassandra::Session#execute*
signatures have changed in how one specifies query parameters. Specify the query parameters array as the value of the arguments key:batch.add(query, ['val1', 'val2'])
# becomes
batch.add(query, arguments: ['val1', 'val2'])
batch.add(query, {p1: 'val1'})
# becomes
batch.add(query, arguments: {p1: 'val1'})
Cassandra::LoadBalancing::Policies::DCAwareRoundRobin
) defaults to using
nodes in the local DC only. In prior releases, the policy would fall back to remote nodes after exhausting local nodes.
Specify a positive value (or nil for unlimited) for max_remote_hosts_to_use
when initializing the policy to allow remote node use.The DataStax Ruby Driver uses the awesome Cucumber Framework for
both end-to-end, or acceptance, testing and constructing documentation. All of the
features supported by the driver have appropriate acceptance tests with easy-to-copy code
examples in the features/
directory.
If you don't feel like reading through the following instructions on how to run ruby-driver tests, feel free to check out .travis.yml for the entire build code.
git clone https://github.com/datastax/ruby-driver.git
cd ruby-driver
bundle install --without docs
Run tests against different versions of Cassandra:
CASSANDRA_VERSION=3.1.1 bundle exec cucumber # runs end-to-end tests (or bundle exec rake cucumber)
CASSANDRA_VERSION=3.0.0 bundle exec rspec # runs unit tests (or bundle exec rake rspec)
CASSANDRA_VERSION=2.1.12 bundle exec rake integration # run integration tests
CASSANDRA_VERSION=2.1.12 bundle exec rake test # run both as well as integration tests
Check out the releases on GitHub and changelog. Version numbering follows the semantic versioning scheme.
Private and experimental APIs, defined as whatever is not in the
public API documentation, i.e. classes and methods marked as @private
, will change
without warning. If you've been recommended to try an experimental API by the maintainers,
please let them know if you depend on that API. Experimental APIs will eventually become
public, and knowing how they are used helps in determining their maturity.
Prereleases will be stable, in the sense that they will have finished and properly tested features only, but may introduce APIs that will change before the final release. Please use the prereleases and report bugs, but don't deploy them to production without consulting the maintainers, or doing extensive testing yourself. If you do deploy to production please let the maintainers know as this helps in determining the maturity of the release.
protocol_version
option of 1 or 2 in cluster options will fail with a
NoHostsAvailable
error rather than a ProtocolError
against Cassandra node versions 3.0-3.4.IO.select
, the maximum number of tcp connections allowed is 1024.IO#write_nonblock
, Windows is not supported.Please refer to the usage documentation for more information on common pitfalls
For contributing read CONTRIBUTING.md
This driver is based on the original work of Theo Hultberg on cql-rb and adds a series of advanced features that are common across all other DataStax drivers for Apache Cassandra.
The development effort to provide an up to date, high performance, fully featured Ruby Driver for Apache Cassandra will continue on this project, while cql-rb has been discontinued.
© DataStax, Inc.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Join Our Newsletter!
Sign up below to receive email updates and see what's going on with our company.