woshidan's blog

あいとゆうきとITと、とっておきの話。

NoSQLデータベースファーストガイドを読んだ

NoSQLデータベース ファーストガイド

NoSQLデータベース ファーストガイド

春先にRDBMSの勉強を少ししたのでNoSQLの話も少し覗きました。2011年発行とやや古いのですが、その分一歩ずつ各種ソフトウェアの背景を把握しながら前に進んでいけるような内容でよかったです。

  • 紹介されていたのはmemcached, Tokyo Tryant, Redis, MongoDB, MySQL + HandlerSocket
    • 当時のものではありますが、サーバ1台目から、レプリケーションやるところまで手順とログあったのどんな感じなのか感覚がわかりやすくて良かった
    • 3章の事例, 4章のパフォーマンス計測のコードがあるところもありがたい*1
  • memcachedなどのkey-valueストアはテーブルに相当するものがないということを認識して雷を打たれた感じになりました
    • なんていうか、マジックナンバー的なコラムが2つ*2用意されたテーブルみたいです
    • パフォーマンスや使い方は全然違いますが、データが持たせられる構造的に
  • 各NoSQLデータベースについて
    • 各ソフトウェアの見出しは適当につけましたが、使うときは4章および現在の各種ソフトウェアのドキュメント参照のこと
    • memcachedは揮発するけど速い
      • 揮発していい、計算に数分かかるけど一度参照されたらしばしば参照されるようなデータに使いやすい
      • RDBMSなどと組み合わせて使うことが前提
    • Tokyo Triantは書き込む分、memcacedより遅いがRDBより速い
      • ブログのアクセス数みたいに希薄しては困るけどしばしば更新 & アクセスされる、みたいな値に使うのが良さそう
        • 検索条件の都合で、範囲を指定してのデータ取得に弱いので、MySQLなど範囲指定が柔軟な他のDBでサマリテーブル作って組み合わせると良さそう
    • rediesはこれらのいいとこ取りしたような感じ
      • 配列の取り扱いが強いのと、集合演算があるので、フォローしてる人のつぶやき一覧みたいにしばしば更新&参照される割に絞り込みがややこしそうなところで使えそうな感じがありました
      • この例みて少し強くなった気持ちになれたので自分でも似たような例を考えて一回試し書きしてみたい
      • 探され方の分だけデータを挿入するためのキーを用意する、みたいな印象
    • mongo dbはドキュメントの構造の柔軟さがまず魅力
      • embedded ドキュメントのとこは実際データの書き込み・保存とか、その辺よく読み取れなかったのでもう一回触り直ししたいが、ドキュメント型の他のNoSQLのぞいてそっちを触った方が良さそう?
      • コンソール叩いてデータベースやコレクションが書き込み時に必要になってから生成されているの示している部分がよかった
      • mapperのバリデーションはアプリケーション側で値のバリデーションやマッピングに利用するために書いているのであり、mongo的にはいらない
      • BSON(データ形式)のこともうちょっと調べたい
    • MySQL + HandlerSocket
      • 速いな! という気持ちですが、あれから時間も経っていて、いくらかのNoSQLはけっこう枯れてきたと思われるので、NoSQLの仕事はNoSQLに任せた方がいいかなという感触

とりあえず、RDBMSの本を読んで、集合演算やしばしば更新されるテーブルに対してどうしようかなーという感じがあり、具体的には

  • ブログのアクセス数
  • 頻繁にアクセス&更新される一覧の表示

に関して悩んだことがあったので、知りたいことはここにあったのかーという感じでした。自分不勉強ですねぇ。。

また、レプリケーションの話が各ソフトウェアごとに書いてあって、データが分散しているとはどういうことかー、みたいなのが少しだけ感覚つかめた気がして*3よかった。例を浴びるの is よいです。これは不意打ちによかったです。

こういうの、インフラ寄りの人からすると当たり前かもしれないんですが、rediesを導入する機能を書き始めるWebアプリケーションエンジニアからすると触るの自体大変だったりして具体的なログの感じとか、データが保存されているイメージとかつかめなくてやたら難航することがあるような記憶があるので、お手本のログがあるの、正常な状態はこれだよ、と教えてもらえる感じでとてもよかったです。

現場からは以上です。

*1:いま同様の検証やるときの参考にもなると思いました

*2:1つが検索用のキーでもう一つが表示などに使う意味のある値

*3:気だけとかいう可能性はありまくりなので、いつかちょっと何か作りたいですね