はじめに
近年、情報システムで扱うデータの量や種類の増加、データ処理に関する要求の多様化に伴い、データを蓄積するための様々な技術が利用できるようになっています。例えば、リレーショナルデータベース(RDB)、キーバリューストア、ドキュメントデータベース、カラムナ、インメモリ、グラフデータベース、分散ファイルシステム、オブジェクトストレージなど、いくらでも挙げられるかと思います。
そこで、本記事では、データストアをざっくり分類し、それらの使い分けをシンプルにまとめてみました。複雑化する一方のデータストアを紐解くための足掛かりになればと考えています。
データストアの種類と特徴
まずデータストアを分類します。様々な分類の仕方があり、例えばDB-ENGINESサイトでは、以下の様に分類しています。
- リレーショナルデータベース(RDB)
- キーバリューストア(KVS)
- ドキュメントストア
- グラフデータベース
- 時系列データベース
- オブジェクト指向データベース
- サーチエンジン
- ワイドカラムストア
- ネイティブXMLデータベース
- イベントストア
- RDFストア 他
これだとざっくり分類するには細か過ぎてしまうので、もう少し大きく分類してみると、今でも広く使われているRDB、それを補完する形で現れたNoSQLデータベース、大量データ処理のために現れたHadoopの3種類でしょうか。さらにRDBは用途によってアーキテクチャが異なること、Hadoopに関しては、エコシステムとして発展中であることから、以下の4つに分類してみました。
- RDB(行指向型)
- RDB(列指向型)
- NoSQLデータベース
- Hadoopエコシステム
それぞれのカテゴリのおおまかな特徴について解説します。
RDB(行指向型)
基幹系システムを中心に幅広く使われているデータベースです。特徴として以下を挙げることができます。
- ACID特性に基づく厳格なトランザクション
- 拡張性は低め
- データ操作にSQLを利用できる
- データを行単位で格納する
- 主に構造化データを扱う
RDB(列指向型)
情報系システムを中心に使われているデータベースです。特徴として以下を挙げることができます。
- 主に参照用
- シャーディング(大きなデータセットを水平分割して複数ノードに分散配置すること)によるスケールアウト等により、拡張性が高い
- データ操作には主にSQLを利用する
- データを列単位で格納する
- 主に構造化データを扱う
NoSQLデータベース
RDB以外のデータベースをひとまとめにしてNoSQLと呼んでいます。このため、KVS、ドキュメントストア、グラフデータベースなど様々なデータストアがこのカテゴリに含まれ、カテゴリ毎に特徴が異なります。
以降ではこの中の一つである、KVSに絞って説明します。
KVSの特徴として以下を挙げることができます。
- BASE特性に基づく結果整合性レベルのデータ整合性
- マルチマスタ(複数ノードで更新可能)やシャーディングによるスケールアウト等で、拡張性が高い
- データ操作には、SQL(ライクなインタフェース)やAPIを利用できる
- キーと値の組み合わせというシンプルな形式でデータを格納
- 主に非構造化データを扱う
Hadoopエコシステム
このカテゴリは大きく以下の要素からなると考えます。
- 分散ファイルシステム
- 分散アプリケーションフレームワーク
- クエリエンジン
- その他
これらを組み合わせることでいろいろな事を実現できるため、組み合わせによって特徴は異なります。そのため以降では、分散アプリケーションフレームワーク+分散ファイルシステムを対象として説明します。
特徴として以下を挙げることができます。
- 主に参照用
- シャーディングによるスケールアウト等により、拡張性が高い
- データ操作にはAPIを利用できる(※クエリエンジンを組み合わせればSQLライクなインタフェースで利用できる)
- 様々な形式のファイルを扱える
- 主に非構造化データを扱う
データストアのカテゴリごとの使い分け
使い分けを考えるにあたって、以下に示すような観点が考えられます。
- 規模(データ量、ユーザ数)
- 用途
- 性能
- 可用性
- データ整合性
- セキュリティ
- 運用性
- 費用
- 保守性 など
技術や製品を選定する際は、様々な観点から十分な検討を行いますが、ここでは規模と用途の2つの軸で整理してみました。
先ず横軸(用途)についてです。オンライントランザクション処理(OLTP)など、主に行単位でのアクセスが発生する用途には、RDB(行指向)またはNoSQL(KVS)を規模などに応じて検討します。また、集計・分析など主に列単位でのアクセスが発生する用途には、RDB(列指向)またはHadoopエコシステムを規模などに応じて検討します。
次に縦軸(規模)についてです。まずはRDBの適用を検討し、RDBで扱えないほど規模が大きい場合に、NoSQL(KVS)やHadoop系を検討するのが良いと考えます。理由としては設計や運用のノウハウが蓄積しているRDBの方が品質を確保しやすい点やが挙げられます。また、NoSQLはスケールアウトによって大規模データやユーザリクエストに対応できる拡張性を得ることができますが、それとトレードオフとなるデータの整合性をどう両立していくかの考慮が必要です。
おわりに
複雑化するデータストアを4つのカテゴリに分類し、カテゴリごとの特徴をまとめました。また、各カテゴリの使い分けを規模と用途を基にシンプルに整理してみました。
今後は、今回1つのカテゴリとして扱った、NoSQLデータベースやHadoopエコシステムの中の整理や、今回対象とした規模と用途以外の観点による整理にもトライしたいと考えています。
また、個々のプロダクトやクラウドサービスの中には上記のカテゴリの枠にあてはまらなかったり、複数のカテゴリにまたがるものもありますので、そういった観点での整理もできたらと考えています。
参考URL(この記事を作成するために参照したもの)
DB-Engines
db tech showcase 2019
12年後のCAP定理: "法則"はどのように変わったか