「RDB技術者のためのNoSQLガイド」を読んだ

Qiita ぐらいの規模のサイトを開発していると、どうしてもデータ量の上限はたかが知れてくる。圧倒的なトラフィックをさばくために日夜格闘するということはないし、データベースが厳しくなってきても RDS のスケールアップで十分に対応できてしまう。そんな感じなので NoSQL といっても Redis をキャッシュ目的で使うくらいのことしかしたことがない。

僕はエンジニアは知っていることが大事だと思っている。ハンマーしか持っていない人は全ての問題を釘だと思ってしまうように、ブラウザ上でのプログラミングしか知らない人は何でもブラウザで解決しようとしてしまうかも知れない。

そういう観点で言えばデータベースとして RDB しか知らないのは非常にまずいことだと思う。簡単な話がデータを永続化するとなったら何も考えずに RDB を選んでしまうのではないか、ということだ。もちろん RDB の向き不向きはある程度把握できているつもりなので、向いていないことに RDB を使うことはないと思うが、RDB でも悪くはないけど…というような場面でより better な選択肢を選択できないのではないか。一度 RDB の外の世界を包括的に学んでみるべきなのでは?

そんな感じのことを考えて、この本を読んだ。

RDB技術者のためのNoSQLガイド

RDB技術者のためのNoSQLガイド

  • 作者: 渡部徹太郎,河村康爾,北沢匠,佐伯嘉康,佐藤直生,原沢滋,平山毅,李昌桓
  • 出版社/メーカー: 秀和システム
  • 発売日: 2016/02/24
  • メディア: 単行本
  • この商品を含むブログ (3件) を見る

NoSQL はバズワードであり、その実態は多種多様だ。本書では大雑把に KVS, ドキュメント DB, グラフ DB という分類を扱っているが、これらを

  • ターンアラウンドタイム重視なのかスループット重視なのか
  • スケールするのかしないのか(≒扱っているデータモデルの複雑さ)

という 2 軸で分類することで RDB との関係性を説明している。ここは「RDB技術者のための」とうたうだけあって、結構分かりやすかった気がする。

特に関心したのが、各種 NoSQL プロダクトが機能拡張で今までできなかったことができるようになり境界線が曖昧になってきていることを指摘したうえで

このように、実際のデータベースは生まれたエリアから出ようと必死です。(略)しかし忘れてはいけないのは、それぞれのデータベースの根幹がどの分野にあるかです。どんなに枝葉を広げて着飾っても、アーキテクチャの根幹を変えることはできないため、枝葉の機能は中途半端になるでしょう。

p.87

という箇所。これは本当にその通りで、RDB で言えば B+ 木というデータ構造をインデックスを使っている限り、 B+ 木でできないことはどんなに頑張ってもできないのだ。それと同じで、各種 NoSQL がもともともっているデータモデルの限界は、それ自体を捨てない限りやはり大きな課題としてついてまわる。逆に言えば、そういう基礎的なところの理論を抑えれば、息の長い知識になるということでもある。

みたいな抽象的な話があったあとで、

  • Redis
  • Cassandra
  • HBase
  • Amazon DynamoDB
  • MongoDB
  • Couchbase
  • Microsoft Azure DocumentDB
  • Neo4j

という各種データベースの具体的なデータモデルについて 1 プロダクト 1 章という分量でひたすら紹介されていく。そもそも本書はこれまで RDB しか触ったことがない SIer の人が技術選定する助けになることが主題となっている。一人の著者が全部紹介しているのではなく章ごとに対応するデータベースのスペシャリストの人が担当していたり、機能要求だけでなく非機能要求にも着眼して全てのプロダクトで同じ項目について言及していたりと、 NoSQL を銀の弾丸として扱わない誠実な印象を受けた。

1 つのプロダクトについて詳しく知りたいのであれば、それのドキュメントを読むのが一番いいが、この本では一段抽象化された立場から各種データベースを横串で比較できるように書いてくれているので、それぞれの違いが際立って見えてくる。気がする。

簡単な CRUD 操作のやりかたも解説されているが、この点に関しては中途半端なのでだいたい読み飛ばした。

2016年出版なので多少の陳腐化は始まっているはず。しかし、↑でも書いたように、大事なのはそのコアになっているデータモデルやアーキテクチャだと思う。そういう意味で、深く知るには足りないが、概要を把握するにはいい本だと思った。

ひとまず、データベースを選定する必要がでてきても、何も考えずに「RDB にしとくか」とはならない程度の知識は得られたと思う。

嫌なことの忘れ方

思い出すだけで心の中がざわついてしまうような嫌なことがあったとき、できるだけ早くそれを忘れてしまいたいと思う。しかし、いくら考えないようにしても、ふとした拍子に頭をよぎって暗い気持ちになってしまう。

生きていれば多かれ少なかれ誰にでもこういう時はあるはずだ。

そのようなとき、僕はエッセイを読むことにしている。それも、宇宙の深淵を語るような、あるいは自然の雄大さを歌うような、とにかく今自分が抱えている悩みが本当にとるに足らない小さいものなんだと気づかせてくれる、そういうエッセイだ。

大量の防腐剤を心に仕込んで、集中の切れ間にやってくる敵を迎え撃つ。

初めのうちはそれでもつらいが、しかし、意識をエッセイに戻す。

光と闇の間でシーソーを繰り返しているうちに、気がつくとその事を考えても心が粟立たなくなってきていることに気がつく。

そうしていつしかそのまま受け入れることができるようになっている。すると不思議ともう頑張って追い出そうとしなくても、向こうが勝手に頭の中から出ていってくれている。


今日は数学者として知られる岡潔のエッセイを読んでいた。「春宵十話」にこんな言葉が記されている。

よく人から数学をやって何になるのかと聞かれるが、私は春の野に咲くスミレはただスミレらしく咲いているだけでいいと思っている。咲くことがどんなに良いことであろうとなかろうと、それはスミレのあずかり知らないことだ。咲いているのといないのとではおのずから違うというだけのことである。

僕はスミレがそうするように、自分が信じるように進む。そのことが世の中にどのような影響があろうとなかろうと、それは僕のあずかり知らないことなのだ。

春宵十話 (角川ソフィア文庫)

春宵十話 (角川ソフィア文庫)

Chrome で開いているタブの URL をキーボード操作だけで Markdown 形式にしてコピーする

日常的に Markdown を書いていると現在 Chrome で開いているタブを Markdown のリンクとしてクリップボードに保存したくなる場面が多々ある。

今まで、クリップボードに保存した URL を Markdown に変換する alfred workflow を作ったり、ブックマークレットを作ってみたりしたけどしっくりこなくて、結局 Copy as Markdown という Chrome 拡張を使うようになっていた。

chrome.google.com

この Chrome 拡張もマウス操作が必要という点で不満はあったのだけど、 alfred workflow と違って Chrome のセッションを使える(ログインが必要なページも扱える)し、ブックマークレットもマウス操作+キーボード操作が必要であることを考えると、ダメななりに最良なのだった。

Chrome 拡張にキーボードショートカットを設定できる

しかし、最近ふとした拍子に Chrome の拡張機能にショートカットを設定できることに気がついた。

f:id:yuku_t:20170605110521p:plain

  • chrome://extensions/ にアクセスする
  • 一番下にある「キーボードショートカット」を選択する

これを使うと色々な Chrome 拡張をボタン一つで呼び出すことができる。例えばはてブ拡張を表示することもできる。わざわざ B! ボタンをクリックしなくていいのだ。

Copy as Markdown にキーボードショートカットをあてる

というわけで、この機能を使って Copy as Markdown にキーボードショートカットを割り当てることで、ボタン一つで完結することができるようになった。めでたい  🎉

ちなみに「Command+D」に割り当てることにした。デフォルトでこのボタンにはブラウザの「ブックマークに追加」機能が割り当てられているが、ブラウザのブックマークを滅多に使わないのと、 textarea に入力中に英かな変換したときに誤操作でモーダルが表示されてしまいストレスに感じることがあったから。ブラウザデフォルトのキーバインドより Chrome 拡張むけのキーバインドの方が強くてよかった。