Redis(*5)はイタリアの開発者が個人で開発したキー・バリュー型のNoSQLデータベースですが、現在では複数のコントリビュータが開発を行っています。
Redisの特徴は以下の通りです。
読み書きが高速 Redisはデータをメモリ上で保持するので、読み書きを高速に行うことができます。
データストラクチャ・ストア Redisのキーには、画像などのBLOB(Binary Large OBject)や文字列だけではなく、リスト、セット、ソート済みのセット、ハッシュといったデータ構造も関連付けることができます。こうした特性からRedisは「データストラクチャ・ストア」と呼ばれています。
このうちリストは、文字列で記述され、新しい要素をリストの先頭または末尾に追加できます。セットとは文字列の順不同の集合です。ソート済みセットは、それぞれの要素がスコアという値を持ち、そのスコア順に並びます。要素の順に並ぶという点がリストとは異なります。ハッシュは順番のない文字列のフィールドとバリューのマップです。これらの違いを例示すると図2のようになります。
アトミックな処理 Redisは、排他制御によって更新をアトミックに処理できます。
複製のためにマスタ・スレーブ型 Redisはマスタ・スレーブ型(*6)であり、マスタは複数のスレーブを持つことができ、非同期でスレーブに複製を作ります。データを読み出すことだけが目的であれば、データの増加とともに読み出し専用のスレーブ役のノードを追加することでクラスタを拡張できます。
ただし、Redisでは、コンシステント・ハッシング(*7)を用いたシャーディングをクライアント側で行います。Redisのサーバ側には自動復旧や自動リバランスの機能を実装していません。
結果整合性 Redisはマスタからスレーブに複製するまでの間、システム内には複数のバージョンが存在します。つまり結果整合性となります。
メモリに保存し非同期でディスクにバックアップ メモリ上のデータが一定量以上更新されると、非同期でディスクに書き込むことで、データを永続化します。ただし、サーバの電源が落ちると、ディスクに書き込む前のデータは消失します。
*5 Redis http://redis.io/
*6 マスタ・スレーブ型 マスタが主でありスレーブが従の関係となる構造です。具体的にはマスタのデータを主として、それをスレーブに複製することや、マスタがスレーブを制御するなどの関係を指します。
*7 コンシステント・ハッシング 本連載第1回の注6を参照。
Scalaris(*8)は、Quorum(*9)により複製をコントロールすることで「強い整合性」を保証するキー・バリューストアです。
ゴシッププロトコル(*10)で情報交換するP2P型 「強い整合性」を保証するNoSQLデータベースは、マスタ型が大半を占めますが、ScalarisはP2P型のアーキテクチャとなっています。各ノードがゴシッププロトコルによって相互を監視し、障害発生時には自動復旧します。
トランザクションをサポート 構造はトランザクションレイヤ、レプリケーションレイヤ、P2Pレイヤの3層からなり、トランザクションレイヤでトランザクションを提供します。Paxosというアルゴリズム(*11)によりトランザクションのアトミック性を保証しています。
永続性は実装していない データはメモリに保持されるため、複数ノードの電源に障害などが発生すると消失します。また、データを非同期でディスクに書き込むRedisとは異なり、Scalarisではメモリが保持できるサイズにデータが制限されます。
*8 Scalaris http://code.google.com/p/scalaris/
*9 Quorum 本連載第1回の注10を参照。
*10 ゴシッププロトコル 本連載第1回の注7を参照。
*11 Paxosアルゴリズム 分散処理において、ノード間の合意形成を行うアルゴリズムの1つ。障害発生時にデータの安全性を保証する。DC間の保証にこのアルゴリズムを採用した例としてGoogleが提供するHight Replication Datastoreが挙げられる(参考リンク)。
Copyright © ITmedia, Inc. All Rights Reserved.