「RDB技術者のためのNoSQLガイド 」という本が、NoSQLの入門には最適です。
Web上の色々なドキュメントを読むよりもこの本をサクッと買うのが一番早いです。
※注意:タイトル通り、RDBを触ったことある方向け
想定する読者は以下の通り
- RDBの概念や基本用語については理解している
- データベースは触ったことがある
- NoSQLをエンタープライズ環境で利用しようと検討中
目次
【RDB経験者のためのNoSQL入門】RDB技術者のためのNoSQLガイドの感想とメモ
技術には流行り廃りがありますが、コンピュータサイエンス学部で学ぶようなものは一度覚えれば何十年と使える知識です。
データ構造、アルゴリズム、そしてデータベース。
特にデータベースは、リレーショナルデータベースの理論に基づく製品がスタンダードになっていて、「DBを触れれば食いっぱぐれないだろう」と思われる分野でした(主観)
しかし、近年、増加するデータ量や目的用途の違いによりRDBの機能を一部犠牲にして、より目的に適したDBを使おうという流れが出てきています。
そこで生まれたデータベース群をまとめて「NoSQL」と読んでいます。
※わりとバズワードに近い言葉で明確な定義は人それぞれ。SQLではないもの=「NOT SQL」という考えが最初でしたが、最近は「Not ONLY SQL」とも解釈されます
で、この本では、具体的な製品群、DBの種類の違いがわかりやすくまとまっています。
スライドをざっと見るのも良いですよ。
そもそもNoSQLとは?データベースの種類
NoSQLはそもそも明確な定義がないバズワードです。
そのため、性質の違う製品群がまとめて取り扱われていたりします。
しかしこの本では、
- スケールアウトができるか
- オペレーション用途か、分析用途か
という2軸でデータベースの種別と、製品を評価しています。
NoSQLと呼ばれがちな、データベースの種別は以下の3種類です。
- キーバリューストア(KVS)
- ドキュメントDB
- グラフDB
この他、既存のRDB(トランザクションあって遅い)と異なる、DWHとしてのRDBやHadoopなどの分散システムを前提としたシステムもあったりします。
そもそも何故NoSQLが必要なの?
NoSQLが出てきた背景には、RDBで出来ないことがある(不便なことがある)という問題がありました。
最近のデータ処理は3つのVが求められていると言われています。
- Volume(データ量)の増加
- Velocity(処理速度)の増加
- Variety(多様性)の増加
どれもこれもWeb企業が誕生したこと、スマホを通じてBtoC市場でのユーザが増えたことが前提としてあります。
Googleは何億人から依頼された検索をリアルタイムで処理しないといけないです(データ量、処理速度の増加)
TwitterやFacebookはフォロー、フォロワー、ツイート、リツイートなどをリアルタイムで応答できるようにする必要があります、さらに複雑なユーザ間の関係を記述する必要があります(多様性の増加)
そういう現状に対抗するのにRDBだと色々な問題があります。
例えば、RDBの場合は事前にデータ構造(スキーマ)を組んでおいてそこにデータを入れていくという仕組みです。
しかし現在の現実世界では、列情報(属性情報)が多様になったことや、後から列情報が変更されることなどは往々にして起こります。
こういったことにRDBだともはや対応できないのです。
※本の中では、Twitterの呟きをどのように格納しますか?という例があります。
NoSQLの難しい点
NoSQLという道具を知っておくことは、現代のエンジニアとしては必須だと思うのですが、一方で「何から学べば良いんだ」「全体像がわからない」という人も多いと思います。
この本では、軸を立ててそれに沿って各DBの種別と、製品を紹介してくれているので、大変見通しがスッキリします。
ちなみに私としては「NoSQLの各製品は、別の領域にも進出しているのが分かりづらい」という話が大変役立ちました。
「RDBのトランザクション性を犠牲にして、NoSQL(KVSなど)は速度を求めている」と勝手に思い込んでいました。大枠としては正しいと思うのですが、結果整合性など様々な概念で「トランザクションっぽいこと」はできたりもします。
あとは、「スキーマを定義しないのがNoSQL」という印象でしたが、Cssandraという製品では、スキーマの定義が必須だったりします(バージョンアップに伴い仕様が変わった)
ということで、全体像をまず知った上で、具体的な製品の差を見ていくことが重要です。
紹介されていたNoSQL製品
各種データベースの具体的な製品情報が1章ずつ載っています。
それぞれどのデータベース種別に属するのか、その中での立ち位置はどうか、という点に触れてから、製品詳細の話なので、分かりやすいです。
製品詳細の具体的な中味は、公式のドキュメントを読めばもちろん分かりますが、比較のために以下のような観点から各製品を評価している点が、初学者には役に立ちます。
- 概要
- 機能(データモデル、API)
- 非機能(性能拡張、高可用、運用、セキュリティ、出来ないこと、主要バージョンと特徴、国内サポート体制、ライセンス体系、効果的な学習方法)
NoSQL入門には「RDB技術者のためのNoSQLガイド」がおすすめですよ
本書は500ページちょっとあります。
前半の120ページくらいまでは、全体像を知るのに適しているので、そこだけでも読んでおくと良いと思います。
2016年出版ですが、あと10年くらいはこの「前半部分」は役に立つはずです。
それ以降は各製品の個別の説明です。
ここはバージョンが変わるごとに大きく変わるので、製品コンセプトくらいしか実際には使えないと思います。
とはいえ、わかりやすく書かれているので、下記製品を比較・検討している人は、本を買うと時間の短縮になりますよ。
- Redis(Key Value Store / オンプレミス)
- Cassandra(Wide Column Store / オンプレミス)
- HBase(Wide Column Store / オンプレミス)
- Amazon Dynamo DB(色々 / クラウド)
- Mongo DB(Document DB / オンプレミス)
- Couchbase(Document DB / オンプレミス)
- Microsoft Azure Document DB(Document DB / クラウド)
- Neo4j(Graph DB / オンプレミス)
ちなみに上記でオンプレミスと書いた製品もクラウド対応していたりもします。細かい点は書籍でどうぞ。
NoSQL入門の一冊を選ぶならこれ!って感じでした。