NoSQLとはナンダ?

それにしてもIT業界人って造語作るの上手いですね!


Cloud、FinTech、X-Tech、IoT、XaaS(PaaS/SaaS/IaaS)、DEATH MARCH、etc...
閑話休題
NoSQLとは、諸説あるようですが「Not only SQL」の略称、総称、標語。
今までのリレーショナル(関係)データベースとは異なる構造を採用している
SQL(Structured Query Language)を利用しないデータベースのことです。
乱暴に定義すると、MySQL、PostgreSQL、ORACLEなどのRDB以外全部です。


どのようなプロダクトがあるのか


結構あります。
NoSQLの一覧
GDBMのような、Key-Value-Store(KVS)もSQLは使わないのでNoSQLです。
Memcached、Redis、DynamoDB、MongoDBなど知名度が高いものや聞いたこともないものもありますが、大手ベンダーやOSSが続々と製品をリリースしていることからもテック界隈のNoSQLに対しての関心や今後の発展が見込めると思われます。


従来のRDBとどこが違うのか


SQLを利用しないデータベースの総称なので製品によってもかなり違います。
なので、利用者が多い(と思われる)MongoDBと比較します。
DB-Engines Ranking
因みにMongoDBは、英単語の huMONGOus(ばかでかい・途方もない)に由来している名前だそうです。
NoSQLとしては、ドキュメント志向データベースに分類されており、ざっくりとですが主に
・スキーマを定義しなくても使用できるスキーマレスである(項目を定義せずにデータを保存可能)
・複雑な検索条件でデータを検索可能
・JSON形式でデータを格納可能(内部的にはBSON形式)
・コマンドの構文でJavaScriptが使える
・拡張性、可用性、冗長性も考慮(スケールアウト、レプリケーションなど)
・画像ファイルなどバイナリデータもそのまま格納可能
・実行処理速度もRDBに劣らない(という計測結果もある)

という特徴があります。


とても便利そう!だけどやっぱりよく分からなかった


ので、実際にインストールして使ってみました。
公式サイトの「Install MongoDB Community Edition on Linux」を読めばサクッとインストール完了(
Install MongoDB Community Edition on Linux
$ mongo とターミナルから打てばクライアントアプリのmongo shellが起動します。
The mongo Shell
アプリケーションから利用したい場合は、ドライバが必要となるので使用言語のものをインストールしてください。
MongoDB Drivers
※2系と3系がありますが、JSON文字列でダブルクォーテーションで囲まれた数値でのsortは、バージョン3.4から追加されたcollationメソッドを使わないと文字列としてsortされるため、期待した結果が帰ってこないのでハマりどころなのでインストールするバージョンには、注意してくださいね。

とりあえずクライアント(mongo)へのログインは出来ました。
・・・インストールしたはいいけども用語、コマンドからしてRDBと違う。
show tables; も受け付けてくれない。
show collections; という同等のコマンドが用意されていました。
他にもRDBとはかなり違いますね。
でも、スキーマレスな世界が待っているのでここで心折れずに前へ進みましょう!


RDBMSとの用語対応表やマニュアル


MongoDBの基礎入門 - インストール から CRUDまで
MongoDBの薄い本
MongoDB本家のマニュアル(英語)
読みやすかった順番です。NoSQLすごい!RDBは、忘れてしまえばいいじゃない!(ダメ、絶対)


NoSQL(MongoDB)をお勧めしたい理由


・SQL構文知らなくてもJavaScriptの構文が使えるので敷居が低い
・インストールして即使える(スキーマ定義が不要、テーブル作成も不要!)
・変更が多いアジャイルやスパイラル開発モデルにマッチしている
・RDBを触ったことのないフロントエンド・エンジニアにも扱える
・というかコマンド構文がJavaScriptなのでほぼイケる感がある
・mongoimportなどのツール類も充実している
・とりあえずMongoDBにデータぶっ込めば何とかなる!(ような気がする)



まとめ


他にもMongoDBには、レプリカセット、アービター、(オート)シャーディングなど、とても野心的な機能があるのですが、まだがっつり説明出来ないので今後の課題としたいと思います。

元々は、NoSQLというワードに前から興味があり、MongoDBのドキュメント(本家サイト、ブログ、スライド)などを見ていると既存システムのデータベースのスキーマ設計をするときにアプリケーションは一切無視して正規化や関係を十分考慮して設計すること。
極端に言うとアプリケーションレイヤーは、コロコロ変わる場合が多いが、データは永遠だ!最初のスキーマ設計は重要!と言う先人たちの定石とは、全く違ったアプローチで開発が出来ることに驚きました。

また、SQL未経験者でもJavaScriptライクな構文なら比較的学習コストをかけずに覚えられることやシステムでまずプロトタイプを作りたいけど画面などのアプリケーション側から作っていきたいので、RDBMSでテーブル設計定義して項目増減で見直しするとか時間がかかるので、まずサクッと作りたい時などにMongoDBは最適です。

今回は、飛ばしましたが、複数セカンダリーやシャーディングを使ったスケールアウト構成にすれば実運用でも十分利用出来るレベルです。使いたい・・・。

今回は、MongoDBの上っ面を触っただけの ”紹介” なので興味のある方は、ドキュメントなどを読むと繰り返しになりますが、野心的で使い勝手の良いMongoDBを好きになると思うので個人的に強くお勧めします!

(今回も渋谷感ゼロだったな・・・動画でも貼ってお茶を濁すか・・・)

この記事へのコメント