NoSQLをRDBの代わりに使うと、どういう恐ろしいことが起こるか。PARTAKEの作者が語る
NoSQLを使ったときに起こる恐ろしい事例
プレゼンテーションのテーマは﹁NoSQLをRDBの代わりに使うと、どういう恐ろしいことが起こるかを身をもって示す﹂![NoSQL fig1](http://www.publickey1.jp/blog/10/partake01.jpg)
![NoSQL fig2](http://www.publickey1.jp/blog/10/partake02.jpg)
![NoSQL fig3](http://www.publickey1.jp/blog/10/partake03.jpg)
Cassandraでは、新しいKeyの追加が必要。インデックスを増やす代わりに、新しくテーブルを増やすようなもの(Cassandra 0.7ではSecondary Indexにより若干改善されている)。
![NoSQL fig4](http://www.publickey1.jp/blog/10/partake04.jpg)
恐ろしい事例2つ目。
![NoSQL fig5](http://www.publickey1.jp/blog/10/partake05.jpg)
2つ以上のキーを同時に更新したい場合。片方を更新後にクラッシュしたとする。
![NoSQL fig6](http://www.publickey1.jp/blog/10/partake06.jpg)
![NoSQL fig7](http://www.publickey1.jp/blog/10/partake07.jpg)
複数のクライアントからほぼ同時にカウントアップの処理がきたとき、Cassandra内できちんと整合性を保証することは難しい。本当に必要なら、分散ロックを導入し、速度を犠牲にする実装を自分でしなければならない。
![NoSQL fig8](http://www.publickey1.jp/blog/10/partake08.jpg)
ただし0.8系でやっと数が数えられるというウワサも。
まとめ。「NoSQL = Domain Specific Database」(目的特化型データベース)だ。
![NoSQL fig9](http://www.publickey1.jp/blog/10/partake09.jpg)
作者にコメントをもらいました
このプレゼンテーションの作者であり、PARTAKEの開発者でもあるShinya Kawanaka氏に、NoSQLについてのコメントをもらいました。 ―― NoSQLによる恐ろしい事例を紹介されていたが、こうした制限についてどう受け止めているか? ﹁NoSQL = Domain Specific Database﹂だと主張したように、パフォーマンスを求めるNoSQLの都合上、Cassandraの制限はしかたないものだと思っている。しかし、パフォーマンスを落とさない範囲でもまだ機能を追加することもできると思っていて、例えば、0.7系で導入予定のSecondary Indexも、もっと柔軟な指定ができるような実装が可能だと思っている。 ―― こうした恐ろしい事例は知っていたのか? その上でPARTAKEを実装する方法はどうやって学習されたのか? 今回取り上げたNoSQLの制限は、理論としては知っていたがこれが実際のアプリケーションを作る上でどういう障害になるのかは身を持って経験したことはなかった。苦難の道であることはよく分かっていた。しかし制限があるとはいえ、その制限は考えれば色々と逃げ道があるということもPARTAKEを開発したことによって初めて分かってきた。 最近は NoSQL がパフォーマンスが出ないRDBを代替するものとして、あたかも銀の弾丸であるかのような誤解が広がっているのではないかと思っており︵NoSQLを使うほどデータがある人はそんなにいないはずなのに、勉強会などはやたら人気があったり、NoSQLをdissる記事があんまりなかったりなど︶、そんなうまい話はないんだよということを示したかった。 何度も同じことをくり返し言うが、NoSQLは一部のCriticalな問題領域を解くために作られたものであり、その問題領域に自分の問題が入っていないのであれば、研究以外の目的で手を出すべきではない。ほとんどの問題はRDBでも十分うまく行くし、おそらくRDBが一番うまく行く。 ―― 実際にNoSQLを使って実装したPARTAKEについて。 PARTAKEは、そんな制限の中でもアプリケーションとして成立するようにさまざまな工夫を加えている。特に、既存のイベント開催ツールに対する自分の不満点を補うことを中心に機能を開発した。まだ至らない点はたくさんあるが、非常にユニークな機能を持つアプリケーションになっていると思う。これは多数の人に使ってもらうことで、運用上の問題も見つけられればと思ってのことである。したがって、研究用に作ったとはいえToy Applicationにならないように作り込んである。 今後の研究としては、バックエンドをGoogle App Engine︵BigTable︶やRDBにしたバージョンも作成し、比較をしていければ、と思っている。 PARTAKEはオープンソースでもある。これは、Cassandraを用いたアプリケーションの1つとして参照してもらいたいと思ってのことだ。また、現状つけたい機能に対して開発工数が取れていないため、共同開発者を募集している。ぜひ@mayahjpまでご一報を。 NoSQL3 from Shinya Kawanaka ︵追記 2017/12/5‥Partakeのサービスは終了しているので、リンクを外しました︶参考記事
アジャイルソフトウェア開発手法やデザインパターンなど、ソフトウェア開発の分野の先進的な取り組みで知られるKent Beck氏はNoSQLが普及し始めた背景、そして今後の課題について触れています。 ●NoSQL登場の背景、CAP定理、データモデルの分類 NoSQLの登場は、﹁データベースといえばリレーショナルデータベース﹂という状況を大きく変えました。InfoQの記事﹁NoSQLの現状﹂は、こうしたNoSQLの現状を俯瞰し、整理するうえで重要な情報を提供してくれる記事になっています。あわせて読みたい
WebSocketにセキュリティの懸念。Firefox 4とOperaで機能を無効化へ
≪前の記事
企業向け無料マイクロブログ、日本人が開発した「youRoom」があった! つぶやくだけで無料プランがグレードアップ