フェンリル

Developer's Blog

【Sleipnir Start】Amazon ランキングの裏側

about Amazon Ranking on Sleipnir Start

こんにちは。 Web 担当の真谷(シンガイ)です。
今日は、先日 Sleipnir StartAmazon ランキングリリースに関わる話があったのですが、それについてもう少し詳しい話をしようと思います。

私は Amazon ランキングで主にバックエンド処理作成を担当しており、Amazon ランキングのバックエンドでは以下の2つのシステムが稼動しています。

Sleipnir・Sleipnir Start の Amazon での商品購入数を保存するシステム

まず、Sleipnir・Sleipnir Start の Amazon での商品購入数を保存するシステムですが、Sleipnir と Sleipnir Start の Amazon の売上を元に ASIN コード(※1)と売上数を集計しています。

その際に Sleipnir Start で使用しているサブカテゴリーを BrowseNode (※2)を使用して
振り分けています。
新たな BrowseNode ID を追加する事で、サブカテゴリーを容易に増やせるので、急遽サブカテゴリーが追加される際にも柔軟に対応が出来るように工夫しています。

Amazon ランキングで使用する JSON データを生成するシステム

次に、Amazon ランキングで使用する JSON データを生成するシステムですが
これは、毎日集計して保存しているデータから、カテゴリー数 × 期間(最新・週間・月間)の計30個の JSON ファイルを生成しています。

最大 3510 件にもなる商品データがこの30個の JSON データに詰まっており、そのサイズは 200 KB と非常に大きなデータとなります。
これでは受信から展開まで CPU に負荷をかけ、表示までに時間がかかってしまうため、以下の工夫を行なっています。

  • GZIP 圧縮を用いる
    200 KB であれば約 30 KB までデータを圧縮することができます。
    データを小さくすることで受信までの通信時間を抑え、サーバーへの負荷も下げます。
  • JSON データに一部のタグを直接記述する
    JSON データには、キーと値を入れ、JavaScript 側で HTML タグを生成し、その後に出力する方法が最もスマートなのですが、
    JavaScript での HTML 生成には若干の負荷が発生します。
    そこでランキングに使う JSON データには、あらかじめ一部の HTML コードを初めから入れています。
    このお陰でパースしたデータをほとんど処理することなく直接 HTML に出力するだけになり CPU 負荷を下げ軽く見せる事ができます。

2つのシステムを合わせることで、API から取得しただけの売上順ランキングと違い、フェンリル独自のランキングを実現するに至っています。

その他にも Amazon ランキングのシステムで以下のように今までの累計購入数のデータもすぐに算出できます。

累積購入数ランキング

1位 モンスターハンターポータブル 3rd 1558
2位 Xbox Live 3500 マイクロソフト ポイント カード【プリペイドカード】 994
3位 魔法少女まどか☆マギカ 1 【完全生産限定版】 [Blu-ray] 670
4位 機動戦士ガンダムUC(ユニコーン) [Mobile Suit Gundam UC] 3 [Blu-ray] 603
5位 第2次スーパーロボット大戦Z 破界篇 SPECIAL ZII-BOX 559
6位 PLANEX 4層シールド PET材皮膜 ハイスピードHDMIケーブル 2m PL-HDMI02-QD 524
7位 BUFFALO USB2.0 外付けHDD 2.0TB HD-CL2.0TU2/N 480
8位 キャサリン 特典 サントラCD付き 468
9位 真・三國無双6(通常版) 413
10位 よつばと! 10 (電撃コミックス) 409

(集計期間:2010/10/01~2011/05/13)

Amazon ランキングも改良は、これからも行っていきますので、Sleipnir Start を宜しくお願いします。

Sleipnir Start

Twitterこの記事を Retweet する
Twitterフェンリルのオフィシャルアカウントをフォローする

※1 Amazon での商品を表す一意のコードです。
※2 Amazon 内の各カテゴリーや詳細カテゴリーを表すコードです。

Facebook コメント

コメント

名前(必須)

メールアドレス(必須)

URL

スタイル用のタグが使えます

このコメント欄でのご質問、ご要望には、開発チームから回答できない場合があります。ご質問、ご要望は「User Community」内のフォーラムまでお寄せください。