話題の記事

[レポート]NoSQLの必要性と主要プロダクト比較 #dbts2015 #be_crazy_about_db_tech

2015.06.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

超おはようございます。最近めっきり暑くなってきましたね。城内です。 今回は、db tech showcase Tokyo 2015に参加してきましたので、セッションレポートを書きたいと思います。

セッション情報

  • セッション名:NoSQLの必要性と主要プロダクト比較
  • スピーカー:株式会社野村総合研究所 OpenStandiaチーム 渡部 徹太郎氏

スライド

オープンソース サポート 保守 サービス(OSS サポート 保守 サービス)| OpenStandia™(オープンスタンディア)

セッション内容

データを取り巻く環境の変化

  • データのボリュームが肥大化 →GoogleやFacebookの保持データがペタバイト級に
  • データ処理の応答スピードが重要に →Webサイトのアクセス数が秒間10万アクセス
  • データの多様性 →非構造データが増えてきているため、RDBMSでは格納が困難

RDBMSの現状

  • スケーラビリティの上限に達した
  • 非定型なメタデータの管理が困難に
  • ビックデータ化
  • データベースの変更に停止が伴っていた
  • 処理に時間がかかった(例:ECサイトで商品カタログの更新に12時間)
  • 商用RDBMSではスケールアップが高価すぎる
  • スキーマーの再定義に工数がかかりすぎる

NoSQLの登場

NoSQLの特徴は以下の通り。

  • 非構造データの取り扱いが得意
  • 水平分散が得意(結果整合性)

※RDBMSは「強い整合性」を保つため、水平分散が苦手。

Hadoopとの違い

Hadoopの特徴は以下の通り。

  • バッチの分散処理が得意
  • 事前にデータを入れる
  • 応答速度より全体の処理を優先する

NoSQLの分類

  • KVS
    • キーバリュー型・・・redis、memcached、Oracle Coherence、
    • 列指向型ワイドカラムストア・・・Cassandra、HBASE、Cloud Datastore
  • ドキュメント型・・・MongoDB、Couchbase、MarkLogic、PostgreSQL、MySQL、DynamoDB、MS-DocumentDB
  • グラフ型・・・Neo4j

流行として、Hadoopはすでに旬を過ぎている。ドキュメント型、キーバリュー型が現在、グラフ型がこれから。

KVS

redis
  • メリット
    • redis3からシャーディングが可能に
    • 配列に対するPUSH、POPが可能
    • PUB、SUBが可能
    • トランザクションが可能
  • デメリット
    • メモリサイズ以上は使えない
    • ディスクへの先行書き込みはできない
    • 自動負荷分散ができない
Cloud Datastore
  • メリット
    • データ構造でエンティティの親子関係が持てる
    • 部分的なトランザクションができる →同じエンティティグループ内で可能(強い整合性) →異なるエンティティグループだと結果整合性
  • デメリット
    • Notは1つしかできない
    • ソートが先でなければならない
HBASE
  • メリット
    • HDFSが必須(登場人物が多い)
    • Hadoopとの相性がいい
    • 強い整合性を持つ
    • データ圧縮が可能
  • デメリット
    • 5台未満では利用できない(大規模向け)
    • 単独でデプロイできない(HadoopやZookeeperなど)
cassandra
  • 特徴
    • DynamoDBと同じ水平分散方式
    • CQLがSQLっぽく扱える

ドキュメント型

mongoDB

※小規模向け

  • メリット
    • SQL以上の集計クエリ(MS-DocumentDBと並び最強)
    • ロールベースのアクセス管理
    • 大量データの取り扱い
    • リアルタイムでクエリが作成できる
  • デメリット
    • トランザクションができない
    • マルチマスタ更新
couchbase

※大規模向け

  • メリット
    • マルチマスタ
    • CRUDとMapReduce(事前に決めたクエリ)
    • GUIコンソールが提供されている
  • デメリット
    • アドホッククエリ
DynamoDB
  • メリット
    • 最近はJSONに対応(ドライバが吸収)
    • 他のAWSサービスとの連携
  • デメリット
    • 集計、ソート、JSONの検索ができない
    • インデックスが非同期、数に制限
Microsoft DocumentDB
  • メリット
    • SQLライクなクエリ
    • 自動インデックス作成ができる
    • トランザクションサポート
    • 型チェック
  • デメリット
    • 集計、ソートができない
    • 複数インデックスができない
    • Azure上でしか使用できない

■クラウドのNoSQLをどう考えるか? →できることできないことがあるので、クラウドなら必ずしもクラウドNoSQLとは言えない。

MarkLogic
  • 特徴
    • もともとはXML、RDFトリプル、最近JSON
    • XQueryが可能
    • 分類表示、ドリルダウンが可能
    • トランザクション可能
    • アクセス管理、監査、アラートが可能

グラフ型

Neo4j
  • メリット
    • ノード→関連→ノード(JSONで表現)
    • Cypher
    • GUIが素晴らしい
  • デメリット
    • 水平分散ができない
    • コミュニティー版はGPLライセンス

NoSQLの見極め方

  • ありがちな謳い文句はスルーでOK
  • 差別化される要素
    • データ構造
    • アプリからのインターフェース
    • トランザクション
    • セカンダリインデックス、複合インデックス
    • クエリ(ソート、リミット、データの部分更新、集計)
    • マルチマスタレプリケーション
    • アクセス権限管理
    • 学習コスト(ドキュメントの量、ノウハウの多さ)
  • 性能の単純比較はできない →そもそも一貫性やインターフェースが統一されていない →NoSQL性能比較レポートはあまりあてにならない(クエリによってはMySQLの方が早いことがある)
  • 最新の情報を確認する

Q&A

  • サポート体制について →OSSをサポートしているベンダーを頼る
  • パッチの更新頻度について →ベンダーの有無による、商用側の不具合修正をコミュニティーに還元
  • 製品によってそれぞれ言語が違う、RDB屋がとっつきやすいのは? →redis、mongoDBが分かりやすい、そこから他を選択するのがよいかと

感想

いままでRDBMSしか関わったことがなかったので、NoSQLは薄らしか知らなかったですが、ソフトウェアの種類も多くとても奥が深いなーと思いました。今回のセッションで、いろいろな情報が得られたので、これから自己学習で知識を深めていきたいと思います。

皆さんもNoSQL, NO LIFE的な感じでNoSQLの世界に足を踏み入れてみてはいかがでしょうか?