データベースプログラミングとマルチスレッドプログラミングとマルチプロセスプログラミング
相変わらず長いタイトルしか付けられない自分のセンスが悲しいが、それはさて置き、最近のデータベースプログラミングに大いなる疑問を抱き、これからの
プログラマの道を閉ざしてしまうのでは?とこちらも大いなる危惧を抱くため独り言をいうことにした。
メチャメチャ簡単で楽なのだから仕方ない部分はあるが、そもそも、今の若いプログラマにデータベースプログラミングと言えば、ほとんどのプログラマが
SQLを思い浮かべるに違いない。これがとんでもない話なのである。IPAの国家試験においても各試験においてデータベース関連問題としてSQLを登場さ
せている。データベース自体を構築させプログラミングさせるのではなく、何らかのデータベースエンジンを利用する方法を推奨してしまっているのだ。
本来は、自らデータベースを設計し、セキュアに暗号化し、排他制御によって同時アクセスにも対応し、できる限り高速に動作させるためメモリを有効に利用
し、そのメモリとストレージの同期を取り、随時のユーザのアクションをログに残し、バックアップを自動化して取り、現状のメモリ内容とバックアップ、ログ
を用いて障害時の対応もこなすプログラムを作るべきなのである。
その基本さえできれば、オラクルやMySQLなど必要ない。既存のどのデータベースソフトを用いるよりもはるかに高速でセキュアなデータベースができ
る。確かに保守は大変だし、データベースの移行をするにも大変で、再利用性も低く、プログラマに大きな負担がのしかかることにもなる。けれども、品質が高
くセキュアなデータベースを理解し動作させるためにも、プロの技術を継承していくためにも、そのくらいの苦労は乗り越えなければならない。
CPUのクロックアップ競争が終焉し、今はマルチコア競争真っ只中である。さらに昔から提唱されていたチップセット機能のCPU内蔵化をようやく果た
し、CPUだけ速いマシンから全体的に速いマシンに変わりつつある。けれど、1スレッド、1プロセスの1アプリケーションを動作させる場合、コアが1つで
も2つでも基本的に速度に差はない。CPUに対応したマルチスレッドプログラミングやマルチプロセスプログラミング技術が必要なのである。では、その難易
度は?というとこれが結構面倒くさい。せめてデータベースプログラミングを理解し作ることができるレベルがなければ、到底無理な話である。
つまりデータベースプログラミングより難易度は高いのである(ある面ではデータベースプログラミングのほうが難易度が高い部分もあるが、、、)。という
より、データベースプログラミングはマルチスレッドプログラミングやマルチプロセスプログラミングの良き練習台になる。そのデータベースプログラミングを
亡き者にしておきながら、マルチスレッドプログラミングやマルチプロセスプログラミングをさせようとしている現状に憤りを感じてしまう。
今後登場してくるOSが、まるで今のデータベースエンジンのように面倒な処理を肩代わりし、単スレッドのアプリケーションをマルチコアに分散させ処理さ
せることができれば、プログラマがわざわざマルチスレッドプログラミングやマルチプロセスプログラミングをする必要もないわけだが、現時点の状況下では、
それを実現させるオーバーヘッドはマルチスレッド化して果たす高速化のメリットを消し去ってしまうだろう。CPUコア数が数万個以上になり、CPUとメモ
リをつなぐメモリバスの帯域が現在の数万倍の速度にでもなれば話は別だが。。。
それで何がいいたいのかというと、データベース利用においてデータベースエンジンの利用をできるのなら止めるべきだといいたい。そうすればSQLイン
ジェクションの心配もいらないし、ローカルなデータベースの暗号を解こうとするやからもいない。1サーバで対応する程度のデータベースならば、現状のデー
タベースエンジンの数十倍は高速に動作させられる(もちろんVisual
StudioのCLR方式なんかで組んだら駄目なのだが、、、)。性能の低いコンピュータでもOKとなる。今やコンピュータ搭載メモリにおいて1GB程度
では大容量とはいえない。ところが、数あるデータベースのうち1GBのデータ量を超えるデータベースはどれほどの割合であるだろうか。一部の大企業データ
ベースやWebサイトにて無秩序にデータを収集するようなデータベースでもない限り、そこまでのデータ量を抱えるケースはあまりない。ほとんどが単純なオ
ン・ザ・メモリーデータベースで済むのである。搭載メモリ量をはるかに超えるデータ量を取り扱う機能やファイルシステムまで独自仕様にするほどの機能が必
要であれば、責任問題もあるので外部委託してデータベースエンジンを利用するのも一方法だとは思うが、そうでもない限りは、データベースエンジンの利用は
避け、積極的にデータベースプログラミングを行うべきだと考える。
高速である、セキュアである、お金はかからない、そう考えれば、厳しいのはプログラマだけなのである。プログラマがもっと苦しめば、全くお金がかから
ず、セキュアで高速なデータベースの提供が可能となる。そして、その苦労を乗り越えたものには普通にマルチスレッドプログラミングやマルチプロセスプログ
ラミングのできる技術力が備わってくることだろう。そうしていくことで、これからの時代を支えていくプログラマを育てていくことができるのではないかと考
える。データベースを構築するのに莫大なお金をデータベースエンジンの会社に湯水のごとく出すのではなく、努力するプログラマに大還元して出すべきだと考
える。それが日本の厳しいプログラマ環境を変え、かつプログラミングレベルを上げる近道ではないだろうかと考えるのである。
とある人と話をしているときの会話だが、「どうしてIPAはデータベースプログラミングを推奨せず、データベースエンジンを利用する前提のような試験を
つくるのだろう?」と聞いてみると、「そりゃ、データベースエンジンの会社からお金もらってるんじゃ?」といわれた。こんなところにも癒着や天下りなどが
あるのだろうか?真相は定かではないが、私はデータベースエンジンの利用は極力止め、データベースプログラミングを積極的に行い、これからのマルチコア時
代に対応できるプログラマの育成を推奨していきたい。
ここでの文章、画像、検証結果などは全てDreamHopeに著作権があります。リ ンクに関してはTopLink、DeepLinkともに構いませんが、全部・一部の「学術論文等許諾の不必要な引用」以外の引用に関しては禁止します。
Copyright (C) 2009 DreamHope All Rights Reserved . Access: