えいのうにっき

a-knowの日記です

CDiT for Web(on GAE)が、1MB以上の情報のアップロードに対応しました!

いやはや、なんとかゴールデンウィーク中に片を付けることができました〜。

拙作「CountDown iTunes」のWebアプリ版である「CountDown iTunes for Web」は、Googleクラウド環境である「Google App Engine」(以下GAE)上に構築しています。そのGAEの制約として、1MB以上のデータは登録できないというものがあります。 これに対しては過去に一度、登録対象データをGAE上でzip圧縮にかけるという悪あがきをしました。これにより、たしかに1MBを超えて登録できないというエラーの絶対数は減少しましたが、それでもゼロになったわけではありませんでした。つまり、それだけのデータをお持ちの方は今までfor Webに登録できないという状態が続いていたわけです・・・ホントに申し訳ございませんでした・・・。(今回は、Webアプリ側のみの修正・対応に留まっていますので、CDiTのクライアントをダウンロードしなおして頂く必要はありません。)

実は、上記悪あがきをしたその時に、この問題に対する根本的対策を既にコメントにて頂いてもらっていました。それはつまり、登録対象データを1MB未満のデータに分割し、それぞれを登録するという手法。このコメントを頂いたときには“目からウロコ状態”で「確かにそういう方法があったよね!」てな感じだったのですが、既にzip圧縮ロジックも組み込んでしまい・そういうデータもいくつか登録されてしまっている状態で、「これを現行保証しながらもさらにデータ分割にも対応させるのはなかなか厄介だなー」ということで、今日まで伸び伸びになってしまっていたという有様でございます。

今回の対応内容を少し細かく説明しますと、今までは「zip圧縮した対象データをbyte配列にして、それをBlobにしてデータストアに登録」だったものを、「zip圧縮した状態で、そのサイズが1MB未満なら分割もなにもせず現行の通り。zip圧縮した状態で、そのサイズが1MBを超えるようなら、zip圧縮されたbyte配列を1MB未満で分割し、それを子の情報として登録(親にも、子が存在するという情報を持たせた)」とするようにしました。できるだけ、既存の機能には影響がでないように・・・^^;

これによって、GAEの持つ“登録データサイズの制約”はクリアできるようになりました。つまり、今まで「アップロードしたデータが大きすぎます」というエラーメッセージがCDiTクライアントにて出て登録できなかった方は、基本的に登録できるようになっているハズです。 ・・・と、まだ少し歯切れが悪いのは、まだ他にも制約があるからです・・・。例えば、「1回のリクエストに対しては、一定時間内(30秒だったかな)にレスポンスを返さなければならない」というもの。登録対象データが大きい場合、GAE側ではそのデータを1MB未満のブロックに細分化するわけですが、登録対象データがとてつもなく大きい場合、細分化されたブロックデータの数も膨大なものになるわけです。その膨大なブロック化データの全ての登録完了を、一定時間以内に完了させなければならない、という制約です。“データ登録”の根本的な問題は解決できたように思っていますが、“システム”“Webアプリ”としての全体的な問題は、まだまだグレーな状態といったところでしょうか。

GAEでの開発は、制約との戦い。・・・いや、“戦い”と取るべきではなくて、それを理解した上で正しい作りをしていけばいいわけで、つまりは僕の、そもそもの色んな設計がマズイわけで・・・(´・ω・`)。 ・・・パッチ当て的な作業になってしまっていますが、今後も問題が発生したらひとつずつ対処させて頂きますので、どうか今後もなにとぞ、宜しくお願いいたします〜。。