カテゴリ : WEB制作

先日のエントリーでGoogle App Engine(以下GAE)での制限、特にDatestore Read Operation(以下DRO)の制限がキツイということを書いたけど、割と驚いてしまう事実が発覚した。

あの後、とりあえずMemcacheを使って必要最低限のデータアクセスで済む様にプログラムをチューンアップしてみて、実際にデータストアへの接続回数は改善された。が、どうにも改善されすぎている・・・。ー昨日は半日も持たずにDROが臨界点に達していたのに、昨日確認すると2%ほどしか消費されていない。Googlebotの巡回の量が減ったのかな?と思ったのだけど、そこまで目立った変化は無さそうだし、どうにも解せない。プログラムでコンテンツを表示する以上、キャッシュを使うといっても限度があり、普通に考えてそこまでの成果が出るとは考えにくい(厳密には他にもチューニングはしてるのだが)。

あれこれ考えてみて、一昨日はGAEの管理コンソール上でDatestore Viewerでデータの中身を確認していたことに思い出し、それが何か関係しているのかと調べてみたら、やっぱり管理コンソール上での作業もデータアクセスとみなされる模様。しかも管理コンソール上では、データは20件ずつ表示されるのだが、これはどうも全件取得してからそのうちの20件を表示すると言うような動きをしているみたい。(GQLコンソールを確認すると“SELECT FROM ***”でデータ取得を行っていた)

僕が保持しているデータストアの総数は1000件以上あるわけだけど、全件見ようとしたら1000×50でこれだけで一日のDROを消費されてしまうというからくりということが分かった。

公開して日も短く、Googlebot以外には殆どユーザーのアクセスが無い状況でこれだったので、途方にくれていたけど、まだGAEに関しては何とかなりそうで少し安心。むしろ早い段階でプログラムのチューンアップをする機会になってよかったと思う。

後はAmazon Product Advertising API のリクエスト制限(2000/h)の問題だけど、こればっかりはどうしたもんか・・・。



仕事をやめてから、今までろくろく出来なかったプログラミングを習得しようと職業訓練校に通ったことは以前のエントリーで記入したが、その後自前で簡単なWebサービスを作り一応公開をしている。


WEBサービスを作るにあたって最も苦慮した点としては、やはりサーバー等の準備だろう。PHPなどと違って、Javaは無料のレンタルサーバーで利用が可能なケースが殆どなく、あったとしても審査がかなり厳しかったりなどハードルは決して低くは無かった。そういう事情もあって取れる選択肢が実質的に“Google App Engine(以下GAE)”一択だった訳だが、どうにもこれが相当に使いにくい。

第一に、GAEではRDBが使えない(課金すればMySQLが使えるみたいだが)、第二にプログラミング上で様々な制約がある、そして第三に無料で使える要領が相当にタイト、ということが挙げられる。

RDBが使えないことについては正直慣れの問題で、もともとプログラマでもない僕にとっては、にわか仕込みで身に付けたMySQLからJDO(GAEで採用しているデータ格納の形式)に鞍替えするのには正直そこまで苦労はしなかった。今では手続きが簡素で、データ型にコレクションクラスが使えるJDOの方がやりやすいとまで感じている。プログラミング上の制約についても、利用可能なクラスが制限されていたりするが、基本的にはそこまで問題ではなかった。

しかし、三番目の無料で使用できるリソースについてはかなり厄介だ。現時点で躓いてしまい、回避方法を模索中だが、中々に根深いと感じる。因みに今躓いているところはタイトルにもあるとおり、“Datastore Read Operations( データストアに格納されているデータの読み込み )”についての制限だ。GAEのガイドラインには一日に0.05M回(つまり50,000回)が限度とされており正直ここいらへんは最初にざっと読み通していただけ出し、「5万回もありゃ充分やん」程度にしか考えていなかった。しかし、ここが落とし穴でこのRead Operationがどの単位で行われているかを理解しなかったため、本日サービスの一時停止という憂き目にあってしまった。

最初読み通していたときには、5万回データ取得が可能という風に考えていたが、実際には一回のデータアクセスでも1回に1000件のデータを抽出したとすると1000回分のOperationが実行されたとカウントされるようだ。

なので一度の多くのデータを抽出することを前提にアプリを作っていると、あっという間に許容量をオーバーしてしまい、一時的にサービスが停止してしまう。もっとも課金すれば上限を増やせるらしいのだが、サービスが軌道に乗るまではあまりお金を掛けたくないというのが実情。

また、setRange()メソッドで抽出するデータ量の制限を掛けたところでも、内部的に全件取得してから該当するレンジのデータを抽出するという形をとっているみたいで、これでも結果は変わらないという報告も出ている。

そうなると、“Select From ***(データベース名)”という実行の仕方ではいかんともしがたく、“Select From *** where id == ● ● ”みたいな形でデータを取得する必要がありそう。しかし、これだとかなり窮屈なつくりになってしまうのでもう何手間か必要になってきそう。

現時点で考えられる手法としては、

1.MemCache使ってデータストアへのアクセス必要最低限にとどめる

2.XMLデータストアとは別に読み込み専用のデータ用意定期的にデータストアと同期する

といったところだろうか。

なんにせよ、GAEを使ってまともなアプリを作るのはかなり難易度が高いということだと思う。

CosPa!



Web制作に関わる仕事をやっていて、且つ身内や知り合いに自営業をやっている人間がいると、高確率でWebサイトを作ってくれとお願いされます。

はっきり言ってめちゃくちゃ気が進まないんですよ。。


何が嫌かって?そりゃあ
  • 無料でやってくれると信じて疑わない
  • サーバー選びやホスティングまでやる羽目になる
  • 文章や画像などの素材を提供してくれない
  • 打ち合わせしても「お任せで!」とか言っちゃう
  • 検索でTOPに!みたいな事を平気で言っちゃう
  • 更新まで任されちゃう
  • ホームページを持てば儲かるという幻想を捨ててくれない
からです。

めんどくさいというよりも、どこか真剣さが感じられないことと、Webサイトに異常な期待を寄せている人が多いのが嫌気が指す最大の要因です。後々トラブルになることも無くはないしね。
あと「プロなんだからさ~、ちゃちゃっと作ってよ」とよく言われますが、プロなら余計に自分の仕事の価値を落としめるようなことはしたくないわけで、これを言われる度に馬鹿にされたような感覚に陥ります。

Webサイトを持つこと自体に価値があるという時代はとうの昔に終わりを迎えていて、よほどニッチなキーワードで勝負するわけでも無い限り、どこもかしこもレッドオーシャンです。Webサイトで成功している人たちはレッドオーシャンで生き抜くためにめちゃくちゃ真剣に取り組んでいるわけなんですよね。ちゃんとターゲットを絞って、価値のあるコンテンツを提供して、飽きられないように更新頻度を高めて、最新のWeb技術を取り入れてみたり、ソーシャルマーケティングでファンを拡大したりと、挙げればキリがありません。もっと言えば、コンバージョン率を0.2%保つためにどれだけの工夫が必要なことかを理解して欲しいところです。

出来れば何とか回避したいわけですが、どうしたものか。いろいろ考えて、今後制作をお願いされたら、

  • 制作開始前にすべての素材を用意させる。そして要求仕様を書かせる。
  • 制作後の取り決めをキチンと決めておく

 という手法をとってみようと思います。要求仕様と書くとものものしいですが、どういうサイト構成で、どんなデザインにしたくて、どういった機能が欲しいのかというのをドキュメントとしてまとめてもらう程度のものです。傾向として、無料で頼んでくる人はすべてをお任せしたがる人が多いです。 「デザイン?カッコいい感じにしておいてよ!」「キャッチコピー?本文?うーん、任せた!」「写真は、これ使っといて(雑誌や実物の写真を手渡し)」見たいな感じで。始めは二つ返事で「わかった」といいつつ、そのうち面倒くさくなってきてやめるという効果が期待できます。

あとは、公開後の取り決めを事前にきめておき、基本的には自分で何とかしなくちゃいけないという認識を持ってもらうのも一つの手段です。例えば、更新は1ヶ月に1回程度で、半ページ分だけ。不具合発生時には対応するが、必ずしも即時対応を保証しない。また不具合による損失の補填も行わない。など、簡単な基本契約みたいなものを決めておき、依頼者が考えているよりもカジュアルな話ではないという印象を持たせる作戦です。
それでもやりたいんというのなら、そのときは作るしかありませんが、今までよりかはストレスを感じることが少なくなるんじゃないでしょうか。
角を立てずに断りたいのなら、一度お試しあれ!