2012年11月12日月曜日

騙されないための医学入門 - EBM(根拠に基づく医療)とは

わたしはつねづね、全ての人が、医学、経済学、法学の初歩を学ぶべきであると考えています。なぜなら、それらの知識は、人生において役立つ不可欠な知識であるとともに、実世界を理解する手助けをしてくれる大事な教養だからです。

(個人的にはそこにプログラミングも追加したいところですが、人生でどれくらい役立つかは疑問です。教養や知力を高めるという点では、すごく役に立つと信じていますし、仕事や学問の役には立つでしょう、しかしプログラミングそれ自体は人生において医学等ほど必要ではないですね。)

経済学を学ぶなら、スティグリッツの入門書か、クルーグマンのミクロ経済学を読めば事足ります。いきなり教科書だと経済学の考え方が分かりにくい点もあるので、先にエッセイ的なもの(ベッカー教授の経済学ではこう考える―教育・結婚から税金・通貨問題まで)を読んでおくのも良いでしょう。法学を学ぶなら、適当な刑法の入門書を読めば事足ります。どちらもさほど時間をかけることなくエッセンスを学ぶことが出来るでしょう。そして、それは確実にあなたの人生の役に立ちます。

ちなみにミクロ経済学と刑法を選んだのは、それらがマクロ経済学と民法よりも圧倒的にシンプルで分かりやすいからです。とりあえず分野の感じをつかむためだけなら、ミクロと刑法だけ押えておけばよいのではないかというのが、私の独断的意見です。

医学の世界だと、そこまでシンプルに一冊で全体を概観できる本というのは見当たりません。人間という複雑なシステムを扱う以上、一冊で全貌を把握しようというのは難しいのでしょう。そのうえ、世の中には「偽医学」の本や情報があふれており、本物の医者ですら偽医学を提唱したりする有様ですので、ややこしいですね。

それでも、人は医学を学んでおく必要があります。なぜなら本人の健康について最終的に責任を持つのは自分自身しかいないからです。医師の治療を受けるとしても、本人が知識を持って主体的に治療に取り組まなければ治らない病気は数多くあります。そもそも、本人が病気の危険性の認識や、治療の意欲をもたなければ、病院に行くこともなく、薬を飲むこともないのですから、どんな病気も治療できません。


残念ながら素人にとって医学を体系立てて学ぶというのは、かなり難しい行為です。そのような書籍も存在しません。そこで、本記事では、素人が医学を学ぶための一つの考え方を紹介しようと思います。

素人が医学を学ぶための切り口としては、3つの切り口があると思います。1つめが個々の病気について学ぶ方法です。2つ目が、薬について学ぶ方法です。3つめが、統計的な医学について学ぶ方法です。それに比べると、人間の身体の働きについて学ぶのは、学ぶことが膨大で難しいわりに成果があがりにくいので、素人向きではないでしょう。

本稿では、3つめの統計医学について紹介しようと思います。なぜかというと、医学にとって最も大事な考え方は統計であり、医学の発展は統計とともにあり、統計なくして医学はなりたたないからです。そして、統計医学について学ぶことは、世の中に氾濫する偽医学から身を守る方法になります。

ちなみに、個々の病気という観点から医学を学ぶことについては素人向けの良い資料が色々とあります。例えば、ウェブで読むならメルクマニュアル家庭版、本で買うならメイヨー・クリニック 健康医学大事典あたりでどうかと思います。

素人が薬学を学ぶための本は良い物が分かりませんので探してみます。見つかれば、また記事にしますね。


さて、統計医学とは言いますが、ほとんどの皆さんは「なぜ統計が医学と関係あるのか?」とお思いではないでしょうか。

なぜ統計が医学の役にたつのかというと、人間というのは個体ごとに大きなバラツキがあり、病気は確率的に発生し、薬は確率的に効果を発揮するからです。

ある病気にかかった人は、何もせずにいても20%の確率で治るとします。そのときに、Aという薬を飲んだ人も、同じく20%の確率で治るとしたら、その薬は全く効かないのと同じですね。しかし薬のメーカーは、その20%の事例を大々的に紹介して効能を謳うかもしれません。そのため薬事法などは、そうした宣伝を一部規制してはいますが、それでも偽医学やインチキ健康食品は世の中に蔓延しています。

医療では、必ず治療法を評価するときには個別の症例ではなく、統計的データによって評価しなければなりません。それも単なる統計的調査ではなく、実験によって立証される必要があります。

皆さんも「プラシーボ」という言葉について聞いたことがあると思います。

新薬の認可プロセスでは、同じ条件の患者を2つのグループに分けて、片方のグループに新薬を投与し、もう片方のグループには偽薬(プラシーボ)または既存の薬を投与して、その結果を比較します。結果を統計的に評価して、新薬が十分な効果を発揮していれば、薬として認可されます。

このプロセスには、ものすごい費用と労力がかかり、それが製薬会社の利益を圧迫し、医療費高騰の原因となっていますが、それでも省くわけにはいかない重要なプロセスです。

ちなみに、健康食品の宣伝やら、新聞の医学ニュースなどでは、「○○という薬を、試験管で○○という細胞に混ぜたところガンが消えた」とか「○○という薬を、マウスに投与したところガンが消えた」などという話がよく出てきますが、臨床医学的には全く意味のない話です。人間は試験管でもマウスでもありません。そのような新薬候補物質は無数とありますが、実際の薬として認められるのはそのうち何万分の一とか何百万分の一という世界です。


最近の臨床医学では、EBM (Evidence-based Medicine, 根拠に基づく医療)という言葉が一般的になりました。

それは臨床医学においては、常に質の高いエビデンス(証拠)を根拠として医療を行うべきである、という考え方です。エビデンスには以下の種類があります。一般的には、1が最も質が高いエビデンスであり、5はエビデンスとは通常見なされません。 [1]

1. システマティックレビュー (ランダム化比較試験のメタ解析)
2. ランダム化比較試験
3. コホート研究
4. 症例対照研究
5. 症例報告

システマティックレビューとは、ある治療に関する複数の研究成果の統計データについて、統合して統計的な分析(メタ解析)を行って、複数の研究成果を統合した質の高いエビデンスを提供します。 [2]

これによって特定の研究におけるバイアスを排除したり、複数の研究データ(症例数)を統合して質の高い統計データを得ることができます。医学研究には多額の費用がかかるので、個々の研究の症例数は限られたものになるため、メタ解析には大きな価値があります。

システマティックレビューの元祖かつ本家と言えるのが、米国のコクラン共同計画です。コクラン共同計画は世界のEBMの本山とも言え、臨床医学において最も信用できる情報源と見なされています。[3]


ランダム化比較試験は、先ほど述べたように新薬の承認などのさいに行われる研究であり、患者をランダムに2つのグループに割り付け、各グループにAという治療法と、Bという治療法のどちらかを行って、その結果を比較します。

現在は新薬の開発のさいには二重盲検法によるランダム化比較試験が必ず行われます。二重盲検とは、患者の治療を担当する医師も、患者がA/Bどちらのグループに属しているのか分からないようにするという方法です。患者と医師の双方が自分のグループを知ることができないので、「二重」盲検と呼びます。これにより、医師が治療や治療結果の判断に対してバイアスをかけることを可能な限り防ぎます。

この考え方は医学以外の分野にも容易に応用することができ、オーディオ製品や食品などの開発にも応用することができますし、マーケティングのA/Bテストなども同じ考え方ですね。人間という複雑でバラツキのあるものを研究するには、この方法しかありません。

手術などの他の治療法では、プラセボを投与することが難しいので、盲検(ブラインドテスト)を行うことは通常はできません。たまに「偽手術」といって、実際の治療を行わない偽の手術を行う実験もあるようですが、患者がそうした実験に参加したがるとは考えられないので、普通は無理でしょうね。その場合は、盲検することは諦めて、単なるランダム化比較試験を行います。

ランダム化比較試験は、個々の研究のなかでは最もエビデンスとしての質が高いと考えられています。しかし研究自体のデザインに問題があったり、発表バイアス(成果の良いものだけが広く公表される)があることもあるので、素人が個々の研究だけを見て、「この治療法はイケる!」と判断するのは危険です。

いわゆるトクホ(特定保健用食品)と言われる健康食品などは、ランダム化比較試験の結果に基づき認可されているようですが、それが優れた効能を保証しているとは限らないと私は思います。

一つには代用エンドポイントの問題があります。臨床試験の結果はエンドポイントとよばれる評価項目で評価されます。それには、「死亡率を下げる」「痛みをおさえる」など治療上の目的を達成したかどうかを評価する真のエンドポイントと、「食後の中性脂肪を下げる」など健康に利すると考えられる間接的な目標を評価する代用エンドポイントがあります。トクホの臨床試験では、短期間だけ代用エンドポイントが満たされれば良いという考え方のようです。それは必ずしも実際の健康への有用性を保証するものではありません。

いずれにせよトクホの試験は、新薬のように莫大なコストをかけて厳密に行われるのではない以上、眉に唾を付けて見た方が良いでしょう。厚生労働省がなぜこのような中途半端な制度を導入したのか不思議に思います。


コホート研究とは、ある集団についてライフスタイルや受けている治療などの要因について情報収集をしながら長期間の観察を行うことにより、何らかの要因(喫煙など)が健康に及ぼす影響について調査を行う研究手法です。

ランダム化比較試験に比べると、相関関係を見ることはできても、因果関係を直接に知ることはできませんので、その点でエビデンスレベルは低くなります。しかし、数多くの人間を長期間にわたって観察することができますので、ライフスタイルなどのもたらす長期的な影響を調べるには適しています。


症例対照研究はすでに病気にかかった人と、そうでない人がどのような要因にさらされていたかを調べて、病気の原因となる要因を探ります。研究が行いやすいのが利点ですが、統計的に質の良い情報を得るのは困難です。基礎医学研究や疫学研究では有用ですが、臨床上はあまり有用性がありません。 [4]


症例報告とは、一人または複数の患者の症例について「このような事例がありましたよ」という事例報告です。これは通常は考慮に値するエビデンスとは見なされません。ただし、発症した狂犬病という致死率100%の病気を、人類史上初めて治した症例報告には、素晴らしい価値があり、すぐに世界中の臨床家が真似をするようになりました。


治療法のエビデンスレベルについて知るには、学会等の発表している診療ガイドラインが有用な情報源です。診療ガイドラインには難解な物もありますが、一般向けに書かれたものもあり、わりとアップデートされており、役立つと思います。一般向けガイドラインのウェブサイトとしては、mindsがん情報サービス科学的根拠に基づくがん検診推進のページなどがあります。[5]

一般的な素人が治療法の善し悪しについて判断するには、そのような診療ガイドラインを参照することが良いでしょう。mindsにはコクランレビューの抄訳も掲載されています。コクランレビューは現在の臨床医学界において最も信用できる情報源と考えて良いと思います。一般人でも容易に分かる内容、例えば電動歯ブラシなら回転振動式が良いといった内容も掲載されています。


このようなEBMという潮流のせいで、医学研究者は統計学の高い知識が問われるようになり、医学者にとって数学は極めて重要なスキルとなりつつあります。マーケティングや広告の業界人が、じょじょに統計学者やプログラマーに置き換えられつつあるのと似ていますね。

しかし実際には医師の統計の知識は限られたものです。臨床医にとっても、正しく医学情報を理解するために統計の知識が必要なことを考えると、医学教育における統計学の重みを強化しなければならないかもしれませんね。

最後に付け加えておくべきことは、自分という人間は「統計」ではないということですね。5%の人にしか効かない強い副作用のある抗がん剤を使うかどうか、それを判断できるのは自分しかいないということです。当然ですが、医者は、その情報を提供することはできても、判断を下すことはできません。

ですから、医学を学ぶことが大切なのです。さっそく医学を学び始めましょう。ちなみに英語ができる方ならCourseraにも医学や統計学のコースがいくつかありますよん。

2012年10月18日木曜日

ARM社のビジネスモデルとIntelの将来


現在のスマートフォンやタブレットの大半はARM社のプロセッサで動いているのをご存じでしょうか? iPhone, iPad, Kindle, Nexus 7も例外ではありません。

ARM社は、製造設備を一切持たない半導体企業です。しかし、ただのファブレス企業ではありません。ARM社は、自社でプロセッサを製造販売することは一切なく、プロセッサの設計図を他社に販売して稼いでいるIP(知的財産)ベンダーなのです。

ARM社からCPUの設計図を購入したSamsungやTexas Instrumentsなどのメーカーは、CPUを自社で好きなようにカスタマイズして、自社や委託工場(ファウンドリ)でプロセッサを製造して利用したり外販したりします。


ARM社の強みは二点です。

一つには、ARMは低消費電力CPUに特化していることです。モバイル機器では、消費電力が最も重要な要素です。最近では、サーバーやノートPCでも消費電力が重要視されるようになってきました。

もう一つには、ARMは組み込み向けSoC(System on Chip, 統合型プロセッサ)に強みを持っていることです。SoCは、メモリ管理・ビデオ・ネットワークなどの周辺回路をCPUのチップに取り込むことで、実装面積の低減、消費電力の低減、コストの削減を実現します。これはモバイル機器に極めて重要な要素です。

ARMはカスタマイズ可能なCPUの設計図を販売していますので、購入したメーカーは独自の周辺回路や他社から買った周辺回路などを一つのチップにまとめて製造することができます。これはIntelのようにCPUを製造販売している企業には不可能な芸当です。

いくらIntelが強力な企業であっても、一社で全ての周辺回路を開発することはできませんし、多種多様なチップを製造販売することは困難です。

これがIntelのビジネスモデルを大きく脅かしています。


スマートフォンやタブレットは、PCの領域をどんどん切り崩していますし、今後もその流れは止まらないでしょう。そのうえ、ARMプロセッサは十分に進歩しており、今後はPC用としても使われるようになるかもしれません。

初心者ユーザーにとっては、複雑で使いこなすのが難しいWindowsやMacOSのPCよりも、AndroidやiOSのような使いやすいOSを好むのではないでしょうか。そうなれば、キーボードの付いたAndroidノートPCなどが市場に進出してくるのも時間の問題でしょう。

何よりIntelにとって恐ろしいのが、サーバー分野へのARMプロセッサの進出です。

先日、私がIBM BlueGene/Qの記事でも述べたように、サーバー領域においても消費電力や実装密度などが重視されるようになっています。System on Chipによる消費電力と実装密度の向上は、サーバー分野でもどんどん活用されていくでしょう。

サーバーは、PCと異なりWintelの牙城ではありません。Linuxさえ動けば良いという世界です。

数年後には、低価格サーバーというのはSoCのCPUとDRAMとSSDが一つの基板上に実装された、小さなカードのようなものになっていることでしょう。一つのサーバーラックに数千~数万のサーバーノードが実装され、仮想化というのは、サーバー資源の切り分けではなく、単なる管理用・可搬性向上の機能になるのではないでしょうか。(スケールアップよりスケールアウトが容易なことを考えれば、仮想化によるサーバー集約というのはコスト効率の劣る方法です。)

そのときに、サーバーでの勝者はIntelになるのかARMになるのか、興味深いところです。GoogleやAmazonのように大量のサーバーを必要とする企業はARM寄りになるかもしれませんね。

追記: (2012/10/21)

HPはすでにそのようなSoCサーバーを試作しているのですね。1Uあたり72ノードとのこと。おそろしや。

レンタルCTOはじめます

注: 写真はイメージです。
こんにちは、新井です。

個人の取り組みとして、新たにレンタルCTOという活動を始めてみようかと思います。すなわち非常勤の技術コンサルタントとしてベンチャー企業などにアドバイスを行う試みです。

昨今の経営環境では、IT技術の活用が必要不可欠となっていますが、一般企業が優れた技術者を見つけることは容易ではありません。しかし、経営陣にIT専門家がいなければ、ITを高度に活用してビジネスを行うのは難しいのが現実です。

そうした企業の技術参謀役として、ビデオミーティングなどによりアドバイスを行う「レンタルCTO」業をはじめます。


私は、日本を代表する著名技術者ではありませんし、最優秀の経営者でもないでしょう。しかし技術と経営の両方を分かっていて実践している人材という点では、日本では極めて稀少な部類かと思います。いわゆるコンサルタントなどと違い、いまもプログラミングや経営を自分で行っていますので、実用的な知見を提供できます。

これまで、有料動画配信モール、名刺管理ITサービスなどの企画・開発・運用までに携わってきました。動画配信モールは、現在では100TB以上のストレージ容量を運用する巨大なサービスとなっています。

この動画配信モールは、私に開発依頼があったときには、P2P技術を使って安価に動画を配信するという企画でした。しかし私がP2P技術のメリット・デメリットをお話しして、P2Pは今回の案件には適切ではないことをご理解頂き、最終的には通常のサーバーから配信する形式で開発することになりました。

日本でP2P技術で動画配信を行う事業は一つもうまく行かなかったことを考えると、この選択によってビジネスを失敗から救うことができました。

このように、適切な判断のできる高度な技術者を経営判断に活用することは、テクノロジービジネスにおいては必須であると考えます。「プログラムが書けます」というレベルの技術者と、経営判断をゆだねる技術者に求められる知識は全く別のレベルです。


私にとっても、レンタルCTO役をやることで、これから新規事業を手がけるにあたり、様々なビジネスから知見を得たり、新しく優秀な経営者の方々とお知り合いになれるのではないかと期待しています。

私自身の新規事業開発の時間もあり、コンサルティングに使える時間は限られていますので、先着3社までの限定でお受けさせて頂きます。

お互い相性が大切かと思いますので、まずは気軽にお問い合わせ頂き、チャットなどでお話しできればと思います。

お問い合わせは arai [at] mellowtone.co.jp まで。

レンタルCTO基本プラン
* 毎月10万円 (年商1億円以下の企業や個人事業主は毎月5万円に割引します)
* 4時間のビデオミーティングを2回/月
* メールとチャットは無制限 (回答までの時間は無保証)

お手伝いすること:
* IT活用ビジネスに関する企画のアドバイス
* 技術者の採用および、ITアウトソーシングに関するアドバイス
* 基本的な開発プロセスマネジメントに関するアドバイス
* 基本的なITセキュリティに関するアドバイス
* 技術基盤(アーキテクチュア)に関するアドバイス
* システム設計、開発、運用に関するアドバイス

得意な領域:
* ビジネスと技術にまたがる領域 (テクノロジービジネスの企画等)
* ウェブビジネス
* ITベンチャー企業 (受託開発業を除く)
* システム設計
* データベースアプリケーション
* システムの高速化

得意でない領域:
* 大規模エンタープライズシステム
* 大規模プロジェクト
* 市販業務パッケージの活用ノウハウ
* ゲーム開発
* ソフトウェア受託開発業
* 先進的な開発プロセスマネジメント (アジャイル、テスト駆動開発、継続的インテグレーション等)

2012年10月5日金曜日

厚生労働省は間違った日本の薬局制度を廃してバンコクの薬局を見習え


以前、日本での医薬品のオンライン販売規制について書いたことがありました。

そのときにも言及しましたが、日本の薬局というのは何だかおかしいです。

薬剤師がいることにはなっていますが、薬剤師は普通にレジを打っていたり立ち働いていて、とてもきちんと相談できるムードではありません。これなら薬剤師がいる必要がないですよね。何のために薬剤師を常駐させているのでしょうか?

置いている薬も、妙に古臭くて副作用が多かったり、効き目が薄いようなものが中心ですし、値段もやけに高いです。

第一類医薬品の分類もなんだかよく分かりません。リン酸コデインとエフェドリンを含むような比較的に危険な咳止め薬が第二類医薬品に分類されている一方で、ジクロフェナクナトリウム(ボルタレン)の塗り薬という比較的安全と思われる薬が第一類医薬品になっています。ジクロフェナクと同じ非ステロイド性消炎鎮痛剤であるインドメタシンなどは第二類です。

安全性によって分類されているというよりは、単に薬剤師の仕事を増やすためだけに分類されているように思えます。

第一類医薬品を買うときも、べつに懇切丁寧に説明してくれるわけではなく、単に薬剤師がやってきてレジを打って終わりです。なんのための第一類医薬品制度なのでしょうね?

日本では医療費の削減に躍起になっていますが、薬局で薬を買うより、医者に行って薬を貰う方が安いのでは、薬局で薬を買うのは忙しくて医者に行けない人だけになってしまいます・・・ 厚労省にとっての「医療費の削減」には、個人が負担する医療費は含まれないのでしょうね。アホかと思います。

「セルフ・メディケーション」などという言葉がありますが、一部の危険な薬を除けば、単に薬を貰うためだけに毎月医者に行く必要などないですよね。薬局で薬を買えば済む話です。またはアメリカのように一通の処方箋を数回に渡って使えるようにすればよいのです。

そうすれば医療費も削減できて、患者の時間も医者の時間も無駄にならなくなり、とても良いことです。その分、医者の診療時間をもっと患者ときちんと話をすることに使えるようになります。


さて、私は昨年の冬にバンコクに3ヶ月ほど住んでいましたが、彼の地の薬局には感心させられました。

バンコクの中心部は国際的であり、英語が通じますが、それは薬局でも例外ではありません。

高級百貨店エンポリウムに入っているBootsという英国資本の薬局では、薬剤師のいる相談カウンターがあり、眼鏡を掛けた美人薬剤師さんが英語で相談にのってくれます。

例えば、アレルギーの薬はないのかというと、セチリジン(ジルテック)と、最新のレボセチリジンがあり、レボセチリジンは眠くなりにくいが高い、などと説明してくれます。私が、日本の薬局で一般的なクロルフェニラミンはないのか? と聞いたら、「あるけど、そんな古い薬を飲んだら眠くなりますよ!」と言われました。

にきびの薬はないのかというと、抗生物質(クリンダマイシン)と過酸化ベンゾイルとトレチノインがある、と。抗生物質と過酸化ベンゾイルは即効性があり一日二回塗る。トレチノインは、初期はかえって悪化することもあるが長期的にきく。光線を避けるため寝る少し前に塗ること。などと説明してくれます。

これだけ説明してくれるなら、薬局に薬剤師がいる意義があるというものです。

また、古くて副作用の強い薬よりも、新しくて副作用の少ない薬を売るのも、理にかなっています。

薬にはタイで製造されている薬もあれば、海外から輸入している薬もあり、どれも日本の保険診療で貰う薬の3割負担額と同じくらいの金額です。これなら医療費の削減にもつながります。

日本の薬局制度も、このような形に見直して、もし薬剤師を常駐させるなら相談カウンターなどを設けて、ゆっくり相談ができるようにすべきではないでしょうか。そして新しくて安全な薬を安く買えるように、市販医薬品の認可制度を完全に見直すべきですね。

日本では薬局どころか病院ですら、英語が通じるところや通訳を用意しているところは、まれでしょう。このように外国人にとって不都合な体制では、外資系企業はどんどん東南アジアに逃げてしまいますよね。バンコクの大病院では、日本語の通訳までいて、日本語だけで診察を受けることができます。


どうにも日本の薬局制度というのは、厚生労働省が既存の国内弱小製薬会社や薬剤師や薬局を利するために作られたものとしか思えません。21世紀になっても未だにこのように省益ばかりで、国民無視の政策を推し進めるとは理解ができませんね。

厚生労働省というのは、日本の省庁の中でも最悪の存在なのではないでしょうか。レバ刺しは禁止するし、オンライン医薬品販売は禁止するし、それが裁判で違憲判決を受けても上告したりするし、これほど不合理で日本にとって害悪となっている存在が他にあるでしょうか?

あ、京都府警と検察特捜部があった・・・

2012年10月1日月曜日

メイシーのiPhoneアプリが登場しました

メイシーのiPhoneアプリが登場しました!

ユーザーの皆様のご要望にお応えして、メイシーのiPhone用アプリを開発いたしました。

http://itunes.apple.com/jp/app/meishi/id554894177

メイシーのiPhoneアプリでは、名刺データの検索・閲覧と、名刺をカメラで撮ってデータベースに登録する機能がお使い頂けます。

名刺データは、iPhone内に暗号化して保存されますので、飛行機の中など電波の入らないところでも閲覧が可能です。検索も非常に高速となっており、いつでもどこでも、さくさくとメイシーをお使い頂けます。

名刺データからは、地図を表示したり、電話をかけたりすることができますので、外出先での訪問先への連絡などに便利にお使い頂けます。

名刺交換したあとで、名刺をさっとカメラで撮って入力することができますので、タイムリーかつ手軽に名刺の追加が行えるようになりました。

是非、お試しください。

使ってみて、ご要望、ご不明な点、問題点などありましたら、お気軽にメイシーサポートまでご連絡頂ければと思います。

facebookのメイシーページへの「いいね」もまだの方はぜひお願いします!
http://www.facebook.com/mayseejp

皆様のご期待、ご要望に応えられますように更に業務に邁進していきたいと思いますので、今後ともよろしくお願いいたします!

2012年9月24日月曜日

Martin Fowlerの新刊 NoSQL Distilled を読んだよ

NoSQL Distilledは、Martin FowlerとそのThought Worksの同僚によって書かれたNoSQLへの簡単な概略書です。ページ数も薄く、150ページ程度しかないのですが、英語が苦手な我々日本人には、かえってありがたいですね。概略書といっても、日本の本とは違い、実際に実運用で使った人にしか分からない、深く突っ込んだ考察も随所で行われています。

本書では、なぜNoSQLを使うのか、という理由を、水平スケーラビリティ、プログラムの容易さ(プログラムに適したデータモデルの利用)という2つとしています。

NoSQLの水平スケーラビリティについては改めて言うまでもありませんが、プログラムの容易さというのは興味深い観点だと思いました。いわゆるリレーショナルモデルとプログラム言語のデータモデルとのインピーダンスミスマッチを解消する手段としてNoSQLを使うという考え方です。

キーバリューストアやドキュメントデータベースなどでは、一つのレコードをAggregateというひとまとまりのデータと考えることで、配列やハッシュなどのごちゃまぜになったデータ構造をうまく保存できるとしています。この部分については、NoSQLのデータ構造をうまく説明していますので、一読の価値ありです。

またNoSQLの持つスキーマの柔軟性は頻繁な変更のあるシステムと相性が良いのではないかと指摘しています。

また本書では、NoSQLといっても水平スケール指向のものだけでなく、Graph Databaseのように一つのサーバーだけで動かすことを中心にした種類のものにも言及されています。

ドキュメントデータベースなどは、JSONなどのデータにたいして柔軟なクエリを行うこともできるので、一つのサーバーだけで動かすのでもメリットがあるのではないかと考察されています。DynamoDBなどにも対応して欲しい機能です。

但し、本書では依然としてRDBMSがデータベースの第一選択肢に止まり続けるだろうと述べています。私としても、本書を読んだ限りでは、NoSQLの利用は一部の大規模システムなどに止まるのではないかという印象を受けました。より広く使われるには、NoSQLソフトウェアやそれを取り巻く環境がもっと成熟してくることが必要ですね。

本書は列指向データベースのようなOLAP用のデータベースには触れられていなかったのが残念です。私の読解力では、本書で触れられているColumn-Family Storeというものが、Key-Value Databaseとどのように異なるのか全く理解ができませんでした。

2012年9月9日日曜日

NoSQL、CAP定理、BASE、Eventual Consistencyについて深く考えてみた

最近はNoSQLなどといって分散データベースがやたらに流行です。私もDynamoDBを使ってみようと思って色々調べているところですが、学べば学ぶほど奥が深くて恐ろしくなってきます。

まず第一に言っておきますが、現在のところ、いわゆるKey-value store型のNoSQLのメリットは「書き込みのスケーラビリティ」であって、それ以外には大きなメリットはありません。

DynamoDBの場合は「管理不要」「高信頼性」というおまけが付きますので、また話は少し別ですけどね。

他のオープンソース製品を自分のサーバーにインストールするのであれば、RDBMSほどこなれていないNoSQLを運用するのは大変な苦痛と危険が伴うでしょうね。前の記事にも書いたように分散システムを運用するというのは困難かつ苦痛を伴う仕事ですから。

ですから、すさまじい数のアクセスがあるようなシステムでなければ、NoSQLを選択する意味はないでしょう。

データベースに関しては、高いサーバーを買ってなんとかなるなら、高いサーバーを買ってPostgreSQLでも動かしているほうがトータルではずっと安くあがると思いますよ。Xeonを80コア積んだHP DL980Fusion-IOを突っ込んでも1500万円あればおつりが来る時代ですからね。


さて、ここから先はだいぶ込み入った技術の話をします。私も専門家ではなく、Amazon Dynamo[1]の論文を読んだ程度で話をしています。間違っているところがあればご容赦を。

最近喧伝されているBrewerのCAP定理[2]という理論がありますが、一貫性(Consistency)、可用性(Availability)、ネットワーク分断耐性(Partition tolerance)の3つのうち2つまでしか同時に得ることができないという話です。

このPartition toleranceを誤って「分散」と捉えて、「クラウドでは分散は必須なのだから一貫性か可用性のどちらかを犠牲にするしかない」と言っている人たちがいます[3][4]。これは大きな間違いです。分断耐性とは、ネットワークが分断した場合にも動作できるかどうかという話であり、現実にネットワーク分断など滅多に発生しない以上、一貫性も可用性も問題なく確保できます。

ネットワークが分断した場合でもアクセスできるという特性は、DNSやCDNや巨大P2Pネットワークなどには必要な特性かもしれませんが、通常のシステムには不要と言えます。また、これはキャッシュやデータ伝搬の仕組みを使えばアプリケーション側で実装できます。従って、この定理は分散データベースとは何の関係もありません。

BASEはここでACIDと対比されていますが、このBASEもどちらかといえば、データベースのスケーラビリティの話というよりはキャッシュなどアプリケーションよりの話に思います。

この古い学会発表をもとに現代のNoSQLを語るのは、はっきり言って無意味ですし、有害だと思いますね。


NoSQLがしばしばconsistencyを犠牲にするのは決してCAP定理のためではなく、スケーラビリティを確保するためであると考えて良いでしょう。

DynamoDBではconsistent readをサポートしていますが、その場合、(Dynamoと同じquorumによる実装なら)特定の条件下では無限のスケーラビリティが失われるはずです。

Dynamoは、ハッシュキーによってデータを格納するノードを変えていますが、このとき同じハッシュキーに読み書きが集中したとしても、consistencyを犠牲にすれば、ノード数に比例した性能を得ることができます。なぜなら、その場合は同じハッシュキーのデータを格納するNノードのうち1ノードだけに書いたり読んだりすれば良いからです。

また、読み書きのどちらか一方がヘビーな場合にはconsistentでもスケールすることができます。書き込みヘビーなら、書き込みは1ノードに行い、読み込みは全ノードに行えば、読み込みがスケールしない代わりにconsistentです。読み込みヘビーならその逆ですね。

それに対して、consistentに読み書きの双方を行う場合には、最低でもNノードの過半数にたいして書き込みと読み込みを行わねばならず、ノード数に比例したスケーラビリティが得られないことになります。

そこでeventual consistencyという話がでてくるのであり、CAP定理とは何の関係もない話なのです。ハッシュキーが十分に分散していればconsistentでもスケーラブルで可用性ある分散データベースが作れるはずです。


しかしこのように一つの値についてconsistencyが確保されたとしても、残念ながらACIDが実現されるわけではありません。なぜならCAP定理やDynamoDBの言うconsistencyというのは、ACIDのconsistencyとはレベルが違うからです。前者は、最後に完了した書き込みのデータが常に読み出されるというだけの話です。後者では、複数のレコードやテーブルやインデックスにまたがる一貫性が必要です。

(ここから先は適当な推測で書いてます)

ACIDを実装するためには、基本的には、トランザクションマネージャが全てのトランザクションを受け付けて、順番を管理して、順番が入れ子になった書き込みなどが起きないように管理する必要があります。これはスケーラビリティを大きく損なう事態です。ですので、NoSQLではACIDを実装することは本質的価値を損なってしまうのです。

一貫性のある書き込みができなければ、データベース全体として不整合な状態が生まれてしまうこともあります。インデックスを管理するためにもatomicな書き込みが不可欠です。

NoSQLでSQLがサポートされないのは、実装の複雑さもさることながら、整合性のあるクエリを行うためにはスケーラビリティが犠牲になることが理由の一つかもしれませんね。

(適当な推測おわり)

システムのうち、80%くらいの動作は不整合性を許容できるかもしれませんが、残りの20%ではどうしても整合性が必要です。そのときにはアプリケーション側で排他制御や整合性の管理を行う必要がでてきます。それではアプリケーションの開発効率を著しく下げてしまいます。

それが、NoSQLは特別にアクセスの多い場合だけ有効であり、普通のシステムで使うことはあり得ないという理由です。


ということで私はNoSQL全般には懐疑的なのですが、Amazon DynamoDBのように管理負担を軽減してくれるものであれば、もう少し広い利用価値があるような気がします。

実用になるプログラムを書こうとすると、どうしてもデータベースを扱う必要性がでてきますが、RDBMSを使うのは初心者や趣味プログラマ等には重荷であり、小さなプログラムを書くモチベーションを下げています。

DynamoDBを使うことで、もうちょい簡単にシステムが作れるようにならないかな、と思って少しアイデアを温めています。

NoSQL Distilledという新刊や、牛の本などの名著を読みながら、もっと勉強していこうと思います。

[1] Dynamo: Amazon’s Highly Available Key-value Store, Giuseppe DeCandia, et al.
[2] Towards Robust Distributed Systems, Eric A. Brewer
[3] Cloudの技術的特徴について --- ScalabilityとAvailability ---, 丸山不二夫 
[4] 結果整合性(Eventual Consistency)についての分かりやすいプレゼン資料 - Publickey