2013年01月


「苦しい思いをすれば成長する」は大ウソ


が面白かった。Twitterでも書いたけど、実際人間の成長って、努力の質・量およびひらめきの多寡によってもたらされるもので、苦しいかどうかとはあまり相関性がない。成長のための要素は千差万別で、なかにはどうにも苦しいだけだけど成長したというのも一定量含まれている。だから苦しい思いを多数したほうが成長している、というのは平均的なモデルだけを考えれば正しいかもしれない。一方、努力の質やひらめきの充実は単に苦しいつめ込み努力では身につかないケースが多い。このへんの話は以前

知識を詰め込んでも心は鍛えられない


でも論じた話で、つまり自発的に達成した喜びを味わえる形にしないと長続きしないし、壊れるのだ。壊れてしまっては努力も水の泡。結局努力効果の最大化には程々がよいよ、ということだ

そのまま感想を書いてもあとはまあ賛成するところばっかりなので視点を変えてみよう。
「リアルなんてクソゲー」だ、という決まり文句がある。クソゲーとは簡単にいえばゲームバランスを欠いたゲームのことである。せっかく買ったのにあんまりにも難しすぎてやる気がなくなる。あまりにも簡単すぎておもしろくない。意味もなくめんどくさいことをやらされる。そういうのはクソゲーなのである。

現実というのは確かにゲームバランスが悪い。なぜゲームバランスが悪いかと言えば、それは教育システムが画一的だからだ。

リアルがクソゲーでバランスが悪いのは教育の画一性だけが問題だろうか?まあ原因の一つではあるだろうが、到底それだけで説明できるとは思わない。

まずリアルは本当に言われている通り例えばマインドシーカーのような単純無理ゲーなのだろうか?実際にはリアルでの成功者は多数いるし、彼らにとっては無理ゲーではなかったのは間違いない。運が良かった、といえばそれまでかも知れないが、私の知る限り運だけで成功した人間は皆無である。

むしろ個人的には、むしろバランスが偏っているのが問題だろうと思う。人は多様な努力を行うことができる。しかし特定の努力だけにあまりにも有利であるがゆえに、画一化してしまっているのではないだろうか?つまり教育システムの画一化は結果であって原因ではない。

脱ゆとり?とんでもない!ゆとり教育はこれから大成功する ― 日本の教育に効率と多様性を


でも論じた話だ。要はリアルとは「チーター御用達のオンゲー」というクソゲーだということだ。みんな自分の子供に他人より楽をさせるために良い大学に行くことを薦めたんじゃないの?そもそも大学以外でもチートはいくらでもあるだろう。単に信じられているだけでも、男性ばかりが就職有利であったり、世代間の再配分の話があったり、生活保護に関する話もあったりする。

そこで戻って「苦しい思いをしたらそれだけ身につくから」というのは、これは単純な努力するという話であってチートじゃない、と擁護する人もいるかもしれない。しかし私的にはこれも疑わしい。なぜなら終身雇用大企業での出世ほどチートだったものもないからだ。なにしろ会社での地位は、場合によってはほとんど階級社会における身分と同じぐらい強力に作用していた時代なのだから。

ちなみにそんな「大学から良い企業に行くのが幸せの近道」「全てをなげうってまでの出世邁進こそ最高」という前バブル期の黄金パターンの裏をかいたのがブラック企業とFラン大学である。これらは、そういう前時代的な攻略法を盲信している人たちの裏をかき、そこから搾取する。現実の変化と価値観の浸透との差を突いた、実に効率的な方法である。だから、こういった日本の悪い部分は、価値観が変わるまでずっと続くだろうと想像している。

老人の「努力しろ」という忠告が若者に通じないのは、このへんの価値観の差だろうな、と常々思っている。若者はやはり若いゆえに、この種の価値観の変化には老人よりも敏感である(そしてその若者も老いるに従って同じように鈍感になる)だからこそ、現実と古い価値観の違和感にも気づきやすいのだ。その点をちゃんと勉強して発信して行かないと、若者にそっぽを向かれるだけの浅い意見になってしまう。

若者が老人から見て努力しないのは、若者が怠惰なのだからではない。古い価値観に脆弱性があり、悪用されており、別の価値観に頼らざるをえないからなのだ。

 

最後に、チートそのものの存在は撲滅することもできないし、是正も簡単ではない。例えば「あまりにも男性有利な雇用形態を改めるために女性を一時的に積極的に採用したら逆に女性有利になりすぎた」というような、是正行為そのものが新しいチートを生み出す可能性もある。だが、社会は常にこのチートの存在をより少なくするように変化してきた。古い階級社会はよりゆるやかな形になるように崩壊し、民族や性差による差別も緩和されてきた。いきなりなくなるわけではないが、ゆっくりと改善はしている。人間だけでなく、社会の成長もまた努力の質・量による漸次的なものである。そこはゆっくり見守っていくしか無いだろう。

 

 

DBの世界に起こる変革


を見てびっくりするほどがっかりした。DBMSの世界はこれから変革が起こるどころが、もうすでに変革ががんがんに起こっていて、One Size Does Not Fit Allの時代だと言われて久しい。Oracle RDBMSだけの世界とかを見ていると、その変化が見えなくなってしまうことが多いだろう。しかしちょっとRDBMSを離れたら、現在はDBMS戦国時代であり、Oracle社もその有力なプレイヤーの一人である。

とりあえず現状を知りたいと思ったら、以下が非常に参考になる。

NoSQLの現状


50以上のソフトウェアがひしめく市場、これを戦国時代と言わずしてなんだろうか。MongoDBあり、Hadoopあり、KVSあり、NewSQLあり・・・これが21世紀のDBMSの現状だ。

ちなみに先のサイトで話にあった「ジャーナルを書かないRDBMS」というのはつまりLog Structuredなストレージマネージャを採用するという意味だが、かつてRethinkDBが通った道である。

SSD時代になってRDBMSの逆襲はあるか ー ReThinkDBの試みを読み解く


で取り上げたこともある。もっともいつの間にかMemcached互換のシステムになってボルナレフAA略な現在、RethinkDBが本当に通ったのかは知るすべがない。最近のSSDは書き込み性能面で進歩が著しく、実装してみたらロックフリーにしてもそもそも性能面でそれほど有利にならなかったか、完全追記Indexの実装を安定させるのに手間取ったかのどちらかだろう、と推測する。

 

ここ最近に起こったDBMSの変革というのは、ざっというと以下のものがあげられる

  • ディスクI/Oボトルネック神話の崩壊。メモリの増加によるボトルネックの変化とSSDの普及が大きい。RDBMSといえばディスクI/Oがボトルネック、が一般常識とされているが、今となってはそれほど大きな要因ではない。例えばキャッシュヒット率の高いOLTP系システムでは大抵がCPUボトルネックである。読み込み帯域だけなら、ぶっちゃけRAID0+1とかで金さえ積めば買える。その上、SSDはRDBMSが要求するディスクアクセスの中でも最も重要な2つ、ランダムリードと同期ライトの性能を劇的に改善する。FusionIOつかって軽く100倍近い性能改善という話は、決して大げさではない。

  • 厳密にACIDを採用するつもりのないDBの台頭。ACIDは常にDBMSの性能問題の原因であった。厳密にロックさえ取らなければ実は十分に早いのだが、要件がそれを許さなかった。一方で、ユーザーは常に厳密なACIDを求めているわけではない。カジュアルなシステムではここを崩して性能向上というのはけっこうやられてきたわけだ。OODBMSが大して普及しない一方で、KVSが受け入れられたのは、厳密なACIDを捨てる一方でカジュアルに高性能を得られたからだ。

  • カラム指向データベースと圧縮。いくらOLTPだとディスクI/Oがネックではなくなったといっても、数TBのデータを取り扱うようなOLAPシステムでは引き続きシーケンシャルリードが重要なファクターである。そこで出てきたのが圧縮、そして圧縮率向上のためのカラム指向である。そして、圧縮が効率的になればなるほど列指向の旧来型システムとの差異が明らかになった。どうあがいても、圧縮はOLTPと相性が悪いからである。ゆえに、DBMSの世界は分裂を始めているのだ。


とまあ、OSから何から全アーキテクチャが大変革するであろう不揮発性メモリなどという飛び道具を持ち出さなくても、もう変革は大量に起こっているのである。それもこれも、RDBMSのアーキテクチャが限界点に達しているからでもある。

どこから説明しよう。まず列指向DBとしてのRDBMS、つまりISAMからの潮流のタプルストレージとB-Tree indexに依存した世界がひとつ。これは確かに中庸で、OLAPとOLTPの両方に適応できる。しかしOLAPの世界ではディスク圧縮を行なってでもディスクI/Oを使いたい。一方OLTPの世界ではインメモリにしてでもトランザクション性能を高めたい。となると中途半端すぎるのである。

次にプランナを介するクエリ実行。今や時代は実行に1日掛かりそうなクエリから、実行に1msもかからないものまで様々なクエリがある。もちろんOLAP的な部分においては、コストベースで最良のプランを調べる、というのは今でも理にかなっているところがある。一方で10000tpsなどを目指そうものなら、いちいちプランを起こすなんてことはやってられない。

そしてロックだ。ACIDとロックは切っても切れない関係にあるが、RDBMSはACID(のうちD除く)を悲観的ロックに依存している。これはディスクI/Oがネックだった時代にはマルチスレッド化して効率を上げることもできたが、ディスクが早くなるとてきめんに変わる。一番極端な例がVoltDBで、あれは非同期I/Oでやっているので一切ロックを取らない。それによるアドバンテージは20%というから、超高速OLTPマシンの切り札にふさわしい。逆に言うとそこまでしないと、インメモリDBの性能を使い切れないということだ。詳細は以下が役に立つと思う。

VoltDBは何故早いのかは問題ではない。何をするためのシステムなのかが問題だ


いずれにしても、RDBMSというテンプレートから40年、今の時代はもうそこから外れた実装がどんどん出てきており、不揮発メモリがOSの世界にもたらすであろう激震的変化を待たずして、システムの進化は始まっている。

なおDBMSと不揮発メモリについての個人的な予想として、不揮発性メモリはDBMSの世界にそれほど大きな革新をもたらさない。おそらく単にインメモリDBが不揮発になって終わりだろうと考えている。もっとも不揮発インメモリDBは小規模OLTP-DBの決定版にはなるだろう。あとは不揮発メモリをキャッシュに使ったHDDの高速化の恩恵をがっつり得られる程度だろう。

↑このページのトップヘ