SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

実用段階に入ったNoSQLをおさらい
「Cassandra」の概要と導入手順・基本設定

NoSQLとRDBの違い

 これまでのデータ処理の主役はRDBです。IT技術者はRDBの概念を理解して、SQLステートメントを駆使してデータ処理を行ってきました。NoSQLは、データ処理を行うための仕組みですが、RDBとは大きく異なります。混同すると後に手痛い倍返しに会うこともあります。その点を意識して、NoSQLとRDBの違いについて解説します。

データ構造の違い

 RDBは、現実に存在する複雑なデータを取り込んで処理することを目指しています。関連性に着目して、テーブル同士をリレーションで結び付けるのです。複雑なデータ構造をリレーションで整理することによって、構造的に重複をなくしてデータ量を抑えます。これが、データの正規化です。

 それに対してNoSQLは、単純な構造の大量データを高速に処理することを目指しています。リレーションという概念は、ありません。単純な表形式のデータがあるだけで、関連性がないのです。データの重複などは気にせずにレコードに格納します。

図2:RDBとNoSQLのデータ構造の比較
図2 RDBとNoSQLのデータ構造

機能面とスピードの違い

 RDBは、ACIDの実現を追求しているといっても過言ではありません。大量の同時処理があってもデータの一貫性を担保する必要があります。そのために、ロック単位を小さくすることで、影響範囲を小さくしてきました。このような機能は、非常にコスト(手間)が掛り、性能に悪影響を及ぼします。

 NoSQLは、ACIDの実現を追求していません。そのため、命令の到達順に処理が実施されます。例えば、同一データに対する更新も配慮することなく、命令の到達順で処理されるだけなのです。ロックという概念がなく、次々とリクエストを実行するのみです。その割り切りが、処理スピードの速さです。

 では、ノード間で同一keyで異なるデータが存在する場合、どのように解決するのでしょうか。Cassandraは、データにタイムスタンプを自動的に添付します。同一keyで、データが異なる場合には、タイムスタンプを比較して新しい(最近のもの)を採用します。他のデータは、新しいタイムスタンプのデータに置き換えられます。

NoSQLとRDBの選択

 選択のポイントは、2点です。1つは、データ量と処理時間です。億単位のレコード数をミリ秒単位で処理したいなど、RDBでは荷が重い場合にはNoSQLを選択すべきです。

 2つ目は、ACIDの要求レベルです。ACIDを考慮する必要があるのであれば、RDBを選択すべきです。ACIDをNoSQLに求めるのは、無理があります。アプリ側で、回避できるのであれば別ですが、そうでなければRDBに任せるのが無難です。

Cassandraの特徴

 前置きはここまでにして、Cassandraの解説に話を進めます。Cassandraは、分散処理に対応したNoSQLタイプのデータシステムです。データと処理がノードに分散するためにノードの追加によってデータ量と処理能力がスケールします。Cassandraの特徴を順番に紹介します。

データ構造

 Cassandraは、最大で5次元のデータ構造を取り扱えます。Cassandraは、NoSQLの中でもKey-Valueストアに分類されるのですが、より複雑なデータ構造を取り扱える特徴があります。

図3:Cassandraのデータ構造
図3 Cassandraのデータ構造

 例えば、商品データを格納する場合には、次のように使用します。RowKey内のColumnは、揃っている必要はありません。また、Columnには、Timestampが付属します。Keyspaceは、ColumnFamilyを格納するための箱のイメージです。

表1:Cassandraでのデータ格納例
ColumnFamily:ItemList
Rowkey:ItemID Column
Z001 Name Value Timestamp
ItemName チョコレート 1271419252387
ItemColor ホワイト 1271419252387 
LastUpdate 2012/10/01 1271419252387 
RX01 Name Value Timestamp
ItemName バームクーヘン 1271419252387
ItemSize 250g 1271419252387
LastUpdate 2012/10/01 1271419252387

 Cassandraでは、SQLライクで操作できるCQLを提供しています。CQLでは、RDBと非常に近い感覚でテーブルを構築/処理できます。CQL3では、RDBと同様にTable内のすべてのRowが同一のColumn構成です。

表2:QCL3でのデータ格納例
Table(ColumnFamily): ItemList
Rowkey Column
ItemID(PRIMARY KEY) ItemName ItemSize ItemColor LastUpdate
Z001 チョコレート   ホワイト 2012/10/01
RX01 バームクーヘン 250g   2012/10/01

次のページ
サーバ(ノード)構成

この記事は参考になりましたか?

特集記事連載記事一覧

もっと読む

この記事の著者

佐藤 栄一(コネクト株式会社)(サトウ エイイチ(コネクトカブシキガイシャ))

PHPによるWebシステム構築をプロダクトとサポートサービスで支援するコネクト株式会社(創業時はゼンド・ジャパン株式会社)の創立メンバー。主要事業の一つであるMySQLの技術担当(Oracle Certified Expert,MySQL 5.1 Cluster Database Administrator)。ビックデータで注目を集めるCassandraも合わせて担当する。http://www.konekto.jp/

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/7548 2014/01/08 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー