1

多くの写真が掲載された非常にトラフィックの多いサイトを所有しており、各ユーザーがどの写真を閲覧したかを追跡しようとしています。

私の最初の直感は、user_id と photo_id の 2 つの列を持つ SQL テーブルです。しかし、それは私のトラフィック レベルに対応できず、テーブルはすぐに管理不能になります。
SQL または NoSQL (mongodb、couch、redis など) の別のソリューションに関する推奨事項

それが重要な場合、私のコードはほとんどPHPです。

ありがとう!

編集1日に数千万回のビューがあります。

編集ユーザーが特定の写真を閲覧した合計回数を知る必要はありません。そのユーザーが閲覧したかどうかだけです

4

2 に答える 2

1

Redis を試すことができます。Redis は PHP を非常によくサポートしています。Redis を使用すると、特定の写真の閲覧履歴をハッシュマップに保存できます。

$map = 'views|' . $photo_id;
// this line is called whenever a user view a photo
$redis->hset($map, $uid, time());
// this line is called to test whether a user viewed a photo
$redis->hget($map, $uid);

Redis は十分に高速です。ただし、Redis について知っておくべきことの 1 つは、Redis はすべてのデータをメモリに保存するため、最終的にデータが物理メモリを超える場合は、データを自分でシャーディングする必要があるということです。

また、Redis と同様の API を持つ SSDB ( https://github.com/ideawu/ssdb ) を試すこともできますが、PHP もサポートしています ( http://www.ideawu.com/ssdb/docs/php/ )。ほとんどのデータをディスクに保存し、メモリはキャッシュにのみ使用されます。つまり、SSDB の容量は Redis の 100 倍 (最大 TB) です。

于 2013-08-27T16:33:57.283 に答える