S-JIS[2010-05-10/2010-10-21] 変更履歴

storage-conf.xml

CASSANDRA_HOME/conf/storage-conf.xmlは、Apache CassandraのDBを定義する設定ファイル。
Cassandraの起動時に読み込まれ、定義が反映される。

ちなみに、storage-conf.xmlの解釈はDatabaseDescriptorクラスで行われている。


storage-conf.xmlの要素

storage-conf.xmlはStorageをルート要素とするXMLファイル。

<Storage>
  <ClusterName>Test Cluster</ClusterName>
〜
</Storage>
Storageの要素
分類 要素名 ver デフォルト値 備考
基本設定
  ClusterName   Test Cluster クラスター名。
AutoBootstrap 0.5 false  
HintedHandoffEnabled 0.6.2 true HintedHandoff [2010-05-31]
Keyspaces   (Keyspace1) キースペースの定義。
Authenticator 0.6 〜.AllowAllAuthenticator  
Partitioner   〜.RandomPartitioner  
InitialToken      
SavedCachesDirectory 0.6.6 /var/lib/cassandra/saved_caches [2010-10-21]
CommitLogDirectory   /var/lib/cassandra/commitlog コミットログを置くディレクトリー。
DataFileDirectories     データファイルを置くディレクトリー。
  DataFileDirectory   /var/lib/cassandra/data
Seeds     Cassandraのノード群の指定。
  Seed   127.0.0.1
Miscellaneous RpcTimeoutInMillis   10000 ミリ秒 他のノードからの応答が返るまで待つ時間。
デフォルトは10秒。
PhiConvictThreshold 0.6.2 8   [2010-05-31]
CommitLogRotation
ThresholdInMB
  128 MB コミットログのローテーションを行うサイズ。
Local hosts and ports ListenAddress   localhost 他のノードからの接続の為のIPアドレスおよびポート番号。
StoragePort   7000
ThriftAddress   localhost Cassandra(DBサーバー)が接続を受け付けるIPアドレスおよびポート番号。
ThriftPort   9160
ThriftFramedTransport   false  
メモリー・ディスク・パフォーマンス(性能)
  DiskAccessMode   auto  
RowWarningThresholdInMB   512 MB 0.6.6ではデフォルトは「64」。[2010-10-21]
SlicedBufferSizeInKB   64 KB  
FlushDataBufferSizeInMB   32 MB  
FlushIndexBufferSizeInMB   8 MB  
ColumnIndexSizeInKB   64 KB  
MemtableThroughputInMB   64 MB  
BinaryMemtable
ThroughputInMB
  256 MB  
MemtableOperationsInMillions   0.3 百万個  
MemtableFlushAfterMinutes 0.5 60  
ConcurrentReads   8  
ConcurrentWrites   32  
CommitLogSync   periodic  
CommitLogSyncPeriodInMS   10000 ミリ秒  
CommitLogSync
BatchWindowInMS
  1 ミリ秒 この要素自体がデフォルトではコメントアウトされている。
GCGraceSeconds   864000 デフォルトは10日。
DoConsistencyChecksBoolean 0.6.6 true Read Repairの有無の制御。[2010-10-21]
無効にすると、スループットが改善するらしい

Keyspaceの要素

Keyspace要素でキースペースを定義する。
いわばテーブルの定義に当たる。(RDBのcreate tableに相当する)
Storage/Keyspacesの下に複数のKeyspace要素を記述できる。

定義を変更したら、Cassandraを再起動しないと反映されない。

デフォルトで「Keyspace1」という名前のキースペースが定義されている。

<Storage>
  <ClusterName>Test Cluster</ClusterName>
〜
  <Keyspaces>
    <Keyspace Name="Keyspace1">
      <ColumnFamily Name="Standard1" CompareWith="BytesType"/>

      <ColumnFamily Name="Standard2" 
                    CompareWith="UTF8Type"
                    KeysCached="100%"/>
      <ColumnFamily Name="StandardByUUID1" CompareWith="TimeUUIDType" />

      <ColumnFamily Name="Super1"
                    ColumnType="Super"
                    CompareWith="BytesType"
                    CompareSubcolumnsWith="BytesType" />

      <ColumnFamily Name="Super2"
                    ColumnType="Super"
                    CompareWith="UTF8Type"
                    CompareSubcolumnsWith="UTF8Type"
                    RowsCached="10000"
                    KeysCached="50%"
                    Comment="A column family with supercolumns, whose column and subcolumn names are UTF8 strings"/>

      <ReplicaPlacementStrategy>org.apache.cassandra.locator.RackUnawareStrategy</ReplicaPlacementStrategy>
      <ReplicationFactor>1</ReplicationFactor>
      <EndPointSnitch>org.apache.cassandra.locator.EndPointSnitch</EndPointSnitch>
    </Keyspace>
  </Keyspaces>
〜
</Storage>
Keyspaceの要素
要素名 ver 値の例 備考
ColumnFamily     カラムファミリーの指定。
ReplicaPlacementStrategy 0.6 〜.RackUnawareStrategy データの複製を作る場所のルールのクラス。
ReplicationFactor 0.6 1 データの複製を作る個数。
EndPointSnitch 0.6 〜.EndPointSnitch  

ReplicaPlacementStrategy・ReplicationFactor・EndPointSnitchは必須。


ColumnFamilyの属性

ColumnFamily要素でカラムファミリーを定義する。
ColumnFamilyの指定は、Name属性だけ必須で、後はオプション。

カラムファミリーはRDBのテーブルに相当するらしいので、ColumnFamily要素を定義するという事は、テーブルを作成する(create tableを実行する)のに等しい。
ただしカラムファミリー内のカラム名は実行時に動的に指定するので、事前に定義はしない。
また、バイナリーデータであれば何でも入れられるので、カラムの型を定義することも無い。

ColumnFamilyの属性
属性名 ver 値の例 備考
Name     カラムファミリー名。
名前にはハイフン「-」を含んではいけない。
ColumnType   Standard
Super
省略すると「Standard」になる。
スーパーカラムを持ちたい場合、「Super」を指定する。
CompareWith   BytesType
AsciiType
UTF8Type
LongType
LexicalUUIDType
TimeUUIDType
Cassandraから複数カラムを取得する際のカラムのソート方法の指定。
AbstractTypeを継承して自分で定義を作ることも可能。
CompareSubcolumnsWith   スーパーカラムを持つ場合に指定可能。(サブカラムのソート方法の指定)
KeysCached   0.5
100%
200000
sstable毎のキーをキャッシュする割合、あるいは個数。(データをキャッシュする訳では無い)
1未満の数値だと割合、末尾に「%」を付けるとパーセント、絶対値だと個数。
デフォルトは20万個。
RowsCached     データをメモリー上にキャッシュする割合、あるいは個数。
1未満の数値だと割合、末尾に「%」を付けるとパーセント、絶対値だと個数。
デフォルトは0、すなわちキャッシュされない。
データサイズが大きい、あるいは書き込み頻度が多いカラムファミリーはキャッシュすべきでない。
FlushPeriodInMinutes   60 CLIではdescribe keyspaceコマンドの「flush period」でこの値を表示するようになっているが、storage-conf.xmlで定義しても無視される模様。(cassandra-0.6.1)
Comment 0.5   コメントを書ける。(人間向け)
storage-conf.xmlにはXML宣言が無いから、日本語を書く場合はデフォルトのエンコーディングであるUTF-8で書かないといけない。
XML宣言でWindows-31Jとかを指定すればシフトJISでも問題なく書ける。

キャッシュ(KeysCachedRowsCached)でパーセントを指定すると、データ総数が増えればキャッシュされるデータ数も増えていく。


Cassandraへ戻る / Java目次へ行く / 技術メモへ戻る
メールの送信先:ひしだま