sasanoha blog

フリーランスSEの独り言

apache cassandraについて

cassandra

cassandraはオープンソースのNoSQLデータベースである。 ビッグデータの収集に利用される。

ユースケース

以下に事例などが載っている。

academy.datastax.com

特徴

  • NoSQL
  • 高い可用性
  • 拡張性
  • 半構造化データ
  • fault-tolerance

類似製品

NoSQLデータベース台頭の背景

  • データのボリュームが肥大化 膨大なデータを収集するのに、従来のRDBと呼ばれるデータベースでは管理が及ばなくなってきた。
  • データ処理の応答スピード 従来のRDBだと一元管理のため、負荷が集中しがちであり、負荷を分散するためにスケーラビリティが必要であった。
  • データの多様性 データ構造は各サイトにより様々であり(非構造データ)、構造設計が必要だったRDBよりも、非構造データに対して柔軟な対応可能な製品が求められた。

アーキテクチャ

  • all node構成(マスターサーバが存在しない)
  • 単一障害点がない

クラスタ

システムを構成するサーバの集まりをクラスタと呼ぶ。

ノード

クラスタを構成しているサーバ群の1つをノードと呼ぶ。

snitch

snitchと呼ばれる設定ファイルでノード間、あるいは、データセンター間の通信を定義する。 snitchには2つの機能がある。 - ノード間の通信が効率的に行えるようにクラスタのネットワーク経路を通知 - ディザスタリカバリ構成など、マルチデータセンターでサーバを運用し、片側に障害が発生した場合に、片側だけでのサービスを継続させるためのレプリケーション機能

gossip

ノード間の状態などを通知するためのピアツーピア通信プロトコル。 ノード間で毎秒メッセージを交換する。 ゴシップには、バージョン情報が付与されており、古い情報は更新されていく。 マルチデータセンタークラスタにおいて、各データセンター間で1つ以上のノードが必要があり、より安定したフォールト・トレランスの設計には3つのノードを推奨としている。

トーク

勉強中

www.geroba.com

SELECT * FROM cycling.last_3_days WHERE token(year) > token('2015-05-24');

murmur3

暗号化以外の用途に利用できるハッシュアルゴリズムの一種である。 32ビットまたは128ビットのハッシュ値が得られる。 128ビットを利用する場合は、各プラットフォームで最適化されているため、x86とx64で同じ値は生成されない。 github.com

  • 単純で高速
  • 優れた分布
  • 優れたアバランシェ効果(よいアルゴリズムは1bit入力が変われば、全く関連がない値が得られるべきである。)
  • 優れた衝突耐性

MurMurHashのバージョン1のPOC

unsigned int MurmurHash ( const unsigned char * data, int len, unsigned int h )
{
    const unsigned int m = 0x7fd652ad;
    const int r = 16;

    h += 0xdeadbeef;

    while(len >= 4)
    {
        h += *(unsigned int *)data;
        h *= m;
        h ^= h >> r;

        data += 4;
        len -= 4;
    }

    switch(len)
    {
    case 3:
        h += data[2] << 16;
    case 2:
        h += data[1] << 8;
    case 1:
        h += data[0];
        h *= m;
        h ^= h >> r;
    };

    h *= m;
    h ^= h >> 10;
    h *= m;
    h ^= h >> 17;

    return h;
}