Cassandra - DynamoとGoogle Big Tableのアイデアに基づいた分散データベース
主な機能の概要:
- 仕事でテスト済み(Facebook、Twitter、Diggなどで使用)
- フォールトトレラント(各レコードはクラスター内の複数のノードで複製されます)
- 分散化(クラスター内のすべてのノードは同等です)
- 柔軟なデータモデル
- 読み取りおよび書き込みスループットは、新しいノードで直線的に増加します
- 無次元(ボリューム制限なし、検索は常にO(1))
インストールの準備
RubyでCassandraを知り始めるのは便利です。インストールされていると思います。 ここで、同名のruby gemをインストールします。これにより、Cassandraのアセンブリが簡単になります。
sudo gem install cassandra --source http://gemcutter.org
他の宝石と一緒に、thriftもインストールされます(大まかに言って、これは異なる言語間の仲介です)。
Cassandra-gemには、cassandraの最新バージョンを迅速に構築するのに役立つ便利なrakeタスクがありますが、システム全体では使用できず、cassandra-gemフォルダー内でのみ使用できます。 すばやくアクセスするために、ホームディレクトリへのリンクを作成しました。
ln -s /usr/lib/ruby/gems/1.8/gems/cassandra-0.8.0/ ~/cassandra_gem
gem environment
コマンドを使用して、インストールされたgemの場所を確認できます。私の場合は/usr/lib/ruby/gems/1.8です。
cd cassandra_gem
ディレクトリに移動します。ここで、rake:
rake -T
実行できるすべてのリストを理解することをお勧めします。 ここに別のgem echoeをインストールする必要がある場合があります。
Cassandraをインストールする
それでは、データベースを組み立てましょう。 チームでこれを行うことができます
rake cassandra
ここで私は間違って終わったいくつかの事件がありました
tar xzf apache-cassandra-0.6.0-beta2-bin.tar.gz
tar: apache-cassandra-0.6.0-beta2-bin.tar.gz: Cannot open: No such file or directory
これは通常そうではありませんが、cassandraの新しいベータ3バージョンがリリースされ、gemはまだ更新されていないため、ベータ2をダウンロードしようとします。 一般に、これはすぐに修正されますが、これにつまずいた場合は、 こちらからgem'a(0.8)のこのバージョンのbeta2をダウンロードできます 。 次に、ホームディレクトリにcassandraフォルダーを作成し、ダウンロードしたapache-cassandra-0.6.0-beta2-bin.tar.gzファイルをそこに移動します。 コマンドを再度実行します。
rake cassandra
cassandraをビルドするには、antとivy-retrieveが必要です。 念のため、 ここで表示できるコンパイル出力をコピーしました 。 データベースが自動的に起動しますが、最初にデータを保存するためのパスを設定する必要があります。そうしないと何も機能しません。 デフォルトパスにはスーパーユーザー権限が必要です。
構成ファイルの構成
データストレージ用のフォルダーを作成しましょう。
cd ~
mkdir cassandra_data
cd !$
mkdir bootstrap callouts commitlog data staging
touch system.log
構成ファイルは、〜/ cassandra / server / confおよび〜/ cassandra_gem / confの2つのディレクトリに保存されます。 gemを使用してcassandraを実行するため、そこから構成ファイルがロードされるため、編集する必要があるのはそれらのファイルです。
ロガーの設定を変更します。
sudo gedit ~/cassandra_gem/conf/log4j.properties
行
log4j.appender.R.File=data/logs/system.log
に置き換える
log4j.appender.R.File=~/cassandra_data/logs/system.log
本番環境では、このロガーは無効になっています。
storage-conf.xmlの設定:
ディレクトリセクションも同じ方法で変更します(絶対パスを使用します)。 これで、Cassandraが正常に起動するはずです。
データ構造のカスタマイズ
データ構造はstorage-conf.xmlでも定義されています。
理解するために、リレーショナルデータベースの用語を使用します。 大まかに言うと、Cassandraのデータ構造はハッシュです。
キースペース-すべてのデータベースのリスト
キースペース-テーブルを含むデータベース
ColumnFamily-「列」をオンラインで作成できるテーブル
CompareWithは、キーの順序を示します。 通常、アルファベット順に(CompareWith = "UTF8Type")または時間順に(CompareWith = "TimeUUIDType")並べ替えられます
ColumnFamilyには、レギュラーとスーパーの2つのタイプがあります。 スーパーは、各列に任意の数の他の列が格納されることを意味します。 このタイプは、投稿に多くのコメントが含まれるモデルに適しています。 当然、SuperColumnでは、キー自体と他のサブ列(CompareSubcolumnsWith)の両方を整理できます。 たとえば、コメントを時間順に並べ、CompareSubcolumnsWith =“ TimeUUIDType”の順に並べたいとします。
遅かれ早かれ、一貫性レベルなどの用語に出くわすでしょう。 これはシステムの信頼のようなものです。つまり、記録中にcassandraが複数のノードにデータを書き込むまで待機する場合(設定可能)、一貫性レベルは可能な限り高くする必要があります。 少なくとも1台のマシンで記録を待つのに十分な場合は、1を設定します。値レベルは0です-データが記録されるのを待たずに、記録にデータを送信して忘れます。 後者はもちろん最速で、最初は最長です。 通常、生産は0に設定されます。
フェザーテスト
デフォルトでは、いくつかのキースペース(Twitter、Multiblog、MultiblogLong、場合によってはCassandraObject)がstorage-confで構成されます。これは使用します。 irbコマンドを使用して、rubyコンソールに入ります。
irb(メイン):001:0> require 'cassandra' => true irb(メイン):002:0> client = Cassandra.new 'Twitter'、 'localhost:9160' =>#<Cassandra:69944556734180、@ keyspace = "Twitter"、@ schema = {}、@ servers = ["localhost:9160"]> irb(メイン):003:0> client.insert:Users、 'user_name@web.com'、{'screen_name' => 'Suvo'} => nil irb(メイン):004:0> suvo = client.get:Users、 'user_name@web.com' =>#<OrderedHash {"screen_name" => "Suvo"}> irb(メイン):005:0> suvo ['screen_name'] =>「Suvo」
user_name@web.com
にはキーがあります。
client.insertコマンドは何も返さないことに注意してください。 Cassandraへの書き込みは常に成功しています。 次に、レコードを更新して別のフィールドを追加してみます。
irb(メイン):006:0> client.insert:Users、 'user_name@web.com'、{'status' => 'Hello world!'} => nil irb(メイン):007:0> client.get:Users、 'user_name@web.com' =>#<OrderedHash {"status" => "Hello world!"、 "Screen_name" => "Suvo"}>
もう1つの重要なリクエスト(getおよびinsert以外)は、slice_rangeです。 このクエリを使用すると、特定のキー範囲の値を取得できます。
そのため、私たちはなんとかしてcassandraをインストールし、テストデータの書き込みと読み取りを行いました。
さらに、Cassandraをがっかりさせる可能性のあること、Ruby on RailsでCassandraに対して行ったこと、Cassandraに対して行ったことを共有したいと思いますが、記事は完全には適合しませんでした。 ここから読み続けてください 。