エンジニアステップ

初心者エンジニア(1年目~3年目くらい)のための技術ブログ

「RDB技術者のためのNoSQLガイド 」の感想

「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などの分散システムを前提としたシステムもあったりします。

 

本のざっくりした内容はこちらのスライドを見ていただいてもわかります。

www.slideshare.net

 

そもそもなんでNoSQLが必要なの?

NoSQLが出てきた背景には、RDBで出来ないことがある(不便なことがある)という問題がありました。

最近のデータ処理は3つのVが求められていると言われています。

  1. Volume(データ量)の増加
  2. Velocity(処理速度)の増加
  3. Variety(多様性)の増加

 

どれもこれもWeb企業が誕生したこと、スマホを通じてBtoC市場でのユーザが増えたことが前提としてあります。

Googleは何億人から依頼された検索をリアルタイムで処理しないといけないです(データ量、処理速度の増加)

TwitterやFacebookはフォロー、フォロワー、ツイート、リツイートなどをリアルタイムで応答できるようにする必要があります、さらに複雑なユーザ間の関係を記述する必要があります(多様性の増加)

 

そういう現状に対抗するのにRDBだと色々な問題があります。

例えば、RDBの場合は事前にデータ構造(スキーマ)を組んでおいてそこにデータを入れていくという仕組みです。

しかし現在の現実世界では、列情報(属性情報)が多様になったことや、後から列情報が変更されることなどは往々にして起こります。

こういったことにRDBだともはや対応できないのです。

※本の中では、Twitterの呟きをどのように格納しますか?という例があります。

 

NoSQLの難しい点

NoSQLという道具を知っておくことは、現代のエンジニアとしては必須だと思うのですが、一方で「何から学べば良いんだ」「全体像がわからない」という人も多いと思います。

この本では、軸を立ててそれに沿って各DBの種別と、製品を紹介してくれているので、大変見通しがスッキリします。

 

ちなみに私としては「NoSQLの各製品は、別の領域にも進出しているのが分かりづらい」という話が大変役立ちました。

「RDBのトランザクション性を犠牲にして、NoSQL(KVSなど)は速度を求めている」と勝手に思い込んでいました。大枠としては正しいと思うのですが、結果整合性など様々な概念で「トランザクションっぽいこと」はできたりもします。

あとは、「スキーマを定義しないのがNoSQL」という印象でしたが、Cssandraという製品では、スキーマの定義が必須だったりします(バージョンアップに伴い仕様が変わった)

 

ということで、全体像をまず知った上で、具体的な製品の差を見ていくことが重要です。

 

紹介されていたNoSQL製品

各種データベースの具体的な製品情報が1章ずつ載っています。

それぞれどのデータベース種別に属するのか、その中での立ち位置はどうか、という点に触れてから、製品詳細の話なので、分かりやすいです。

製品詳細の具体的な中味は、公式のドキュメントを読めばもちろん分かりますが、比較のために以下のような観点から各製品を評価している点が、初学者には役に立ちます。

  • 概要
  • 機能(データモデル、API)
  • 非機能(性能拡張、高可用、運用、セキュリティ、出来ないこと、主要バージョンと特徴、国内サポート体制、ライセンス体系、効果的な学習方法)

 

まとめ

本書は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 / オンプレミス)

 

ちなみに上記でオンプレミスと書いた製品もクラウド対応していたりもします。細かい点は書籍でどうぞ。