Web技術勉強会 第26回

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    Favorites, Groups & Events

    Web技術勉強会 第26回 - Presentation Transcript

    1. 署名対応+MLDBMによる 署名対応 Amazon署名対応 によるCache による WEB技術勉強会 第26回 技術勉強会 回 RYUICHI TANAKA.
    2. アジェンダ Amazonの署名(Signature)対応方法 Amazonの署名(Signature)対応方法 を利用した したCache方法 MLDBMを利用した 方法
    3. Amazon WebService Amazonのデータ取得 のデータ取得 のデータ 形式 REST形式 改めて言う必要ないよね^^;
    4. しかし
    5. 2009年8月15日から 動かなくなります
    6. どうやらAmazonとしては、サーバからのリクエスト以外は 弾きたい模様。ブログパーツに組み込まれているAPI経由で Amazonのサーバを叩きまくってることでサーバの負荷がやはり ひどいとのこと。 数ヶ月前にアナウンスされたが、いまだに対応していないところ は多い。なので、8/15に同時多発的に動かなくなる可能性がある。 (大手ブログサービスを利用していない個人サーバはその恐れ大) ちなみに、現在は直っているが、Amazon本家のAPIドキュメント が貧弱、サンプルプログラムが動かない現象もあった。
    7. Product Advertising API APIの正式名称が変更 Signatureが必須 そろそろ対応しないとまずい
    8. 対応方法 PHP PEAR::Services_Amazon (新APIに対応済み) Perl URI::Amazon::APA (id:dankogai@CPAN, CodeRepos, github)
    9. 自作する場合 今回はこの方法を紹介します
    10. Signatureが鬼門 Signature の作り方が面倒!
    11. Signatureのルール ①必要なパラメータを用意する Key Value Service AWSECommercesService AWSAccessKeyId アクセスキー Operation ItemSerchなど SerchIndex Booksなど Keywords キーワード ResponseGroup ItemAttributesなど Timestamp タイムスタンプ Version バージョン
    12. Signatureのルール ②パラメータを昇順にソートして連結 (このときUTF-8でURLエンコードする) GET¥n webservice.amazon.co.jp¥n /onca/xml¥n AWSAccessKeyId=xxxxxxxxxxxxxxxxxxxxx&Keywords=Pe rl&Operation=ItemSearch&ResponseGroup=Images%2C ItemAttributes&SearchIndex=Books&Service=AWSECo mmerceService&Timestamp=2009-07- 26T12%3A45%3A44Z&Version=2009-03-31
    13. Signatureのルール ③HMAC with SHA256 hash algorithmを適用し てSignatureを生成し、URLエンコードする Signature PO%2FwmLa9hVwrLGEOnmf3i%2FqPzLvuGOM0hYXl8 uKOKxk%3D
    14. Signatureのルール ④SignatureをリクエストURLの末尾に連結 http://webservices.amazon.co.jp/onca/xml?AWSAccessK eyId=02GA6TH96EC9SQKGEJ82&Keywords=Ruby&Ope ration=ItemSearch&ResponseGroup=Images%2CItemAt tributes&SearchIndex=Books&Service=AWSECommerce Service&Timestamp=2009-07- 26T13%3A07%3A47Z&Version=2009-03- 31&Signature=PO%2FwmLa9hVwrLGEOnmf3i%2FqPzL vuGOM0hYXl8uKOKxk%3D
    15. あとは煮るなる焼くなり あとは従来通りXMLで返っ てくるので、JSONにするな りDBに入れるなりしましょ う。
    16. だが、 > Amazonのサーバを叩きまくってることでサーバの負荷がやはり > ひどいとのこと。 どうせならAmazonに 対して優しくなろう!
    17. 優しくない方式
    18. 優しくない方式
    19. 優しくない方式
    20. 優しい方式
    21. 優しい方式 Cache Cache Cache
    22. 優しい方式 Cache Cache Cache
    23. データをキャッシュする データをキャッシュする には… ファイルキャッシュ? RDBMS?
    24. どちらも悪くない が、良くもない
    25. 一番やるべきは、 「ハッシュそのもの」 をキャッシュすること。 単なるファイルベースのキャッシュや RDBMSでは難しい
    26. そこで… 組み込み向けの DBを使う
    27. 組み込みDB Berkeley DB 組み込みDB。SQLは持たない。 C言語など多くの言語から使用可能 SDBM Key、Value含め1008バイトしか保存 できない
    28. 組み込みDB Data::Dumper ハッシュのままテキストに保存可能 (読み込み時にハッシュとして扱える) MLDBM ハッシュをメモリで記憶しているそ のままの形式でファイルに保存可能。 テキストデータより小さい、読み書 きが高速。格納する容量制限がない。
    29. MLDBMが 最も使える!
    30. MLDBMを使う前に…
    31. tie関数 オブジェクトでない、Perlの組 み込みデータ型を裏でオブジェ クト化する仕組み。 変数を指定されたクラスに結び つける
    32. tie関数 tie my %data, ‘DB_File’, ‘/path/to/cache.db’, O_CREAT, 0666
    33. tie関数 結びつける オブジェクト tie my %data, ‘DB_File’, ‘/path/to/cache.db’, O_CREAT, 0666 結び付けられる オブジェクトに 変数 渡す引数 「結びつけるオブジェクト」には、 DESTROY、FETCH、STOREなどのメソッドを 実装しておく必要がある。
    34. MLDBMを使う use MLDBM qw/DB_File Storage/; use Fcntl; tie my %data, ‘MLDBM’, ‘/path/to/cache.db’, O_CREAT | O_RDWR, 0666 or die “$!”; ・DB_FileはBerkeleyDBを使うためのモジュール。 DB_File BerkeleyDB ・Storageはデータのシリアライズ方法。 ほかの方法よりも高速。 ・FcntlでO_CREATなどが使える。
    35. 今回の成果物 Cache.pm MLDBMを利用したキャッシュモジュール。 キャッシュの新規作成と読み込みが可能。 Amazon.pm 署名対応Amazon書籍検索モジュール。JSON を返す。Cache.pmを継承している。インスタ ンス作成時のオプションでキャッシュするか しないかを決められる。
    36. #!/usr/bin/perl use strict; サンプルコード use warnings; use CGI; use FindBin::libs qw{ export base=syscommon }; use MyLibs::Diarysys::Service::Amazon; my $cgi = new CGI(); print $cgi->header(-type=>"application/x-javascript", -charset=>"utf-8"); my $amazon = MyLibs::Diarysys::Service::Amazon->new({ key => “Input your Accesskey", secret => “Input your Secretkey", keyword => $cgi->escapeHTML($cgi->param('keyword')), callback => $cgi->escapeHTML($cgi->param('callback')), cache_file => "/path/to/cache.db", ttl => 10000 }); print $amazon->get_data();
    37. キャッシュによる効果 実行環境 OS:Windows Vista CPU:Core 2 Duo U9300 MEM:3.00GB Eclipse3.4上で実行(ActivePerl、EPIC)
    38. キャッシュによる効果 実行結果 キャッシュなし:約1.9秒 キャッシュあり:約0.07秒
    39. 結論 キャッシュ万歳! Amazon対応はお早めに
    40. 参考資料 perlによる大規模データの取扱い http://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_b igdata.html#sdbm MLDBM http://perldoc.jp/docs/modules/MLDBM- 2.01/MLDBM.pod tie関数: dbmopenの代わりに使う - bluespearの勉強メモ - bluespearグループ http://bluespear.g.hatena.ne.jp/bluespear/200710 14/1192342961
    41. 参考資料 404 Blog Not Found:perl - tie()って 何をtieするの? http://blog.livedoor.jp/dankogai/archives/51076010 .html Signed Requests Helper - Amazon Product Advertising API http://associates- amazon.s3.amazonaws.com/signed- requests/helper/index.html
    SlideShare Zeitgeist 2009

    + mapserver2007mapserver2007 Nominate

    custom

    265 views, 0 favs, 0 embeds more stats

    Web技術勉強会 第26回

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 265
      • 265 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 0
    • Downloads 2
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories