2

私たちのアプリでは、ユーザーは写真をアップロードできます。このアップロード イベントはアクティビティとして登録され、そのユーザーの「フォロワー」アクティビティ ストリームにプッシュされます。

使用する流れと技術は次のとおりです。

  • ストレージ用の MYSQL バックエンド (アップロードされた画像の URL は、いくつかのメタデータと共に photos テーブルに保存されます)
  • アクティビティが生成され、MYSQL のアクティビティ テーブルに格納されます
  • アクティビティ ID を REDIS に送信する GEARMAN ジョブが作成されます。このアクティビティ ID は、アクティビティ ストリームを設定するためにすべてのユーザー フォロワーにファンアウトされます。
  • REDIS からアクティビティ ID の配列を取得し、MYSQL で単純な IN クエリを実行してストリームを取得します。
  • ユーザー アクティビティ ストリームでは、トリミングされた小さなバージョンの画像が表示されます。

現在、これはすべてうまく機能し、いくつかのキャッシング レイヤーとともに、システムの安定性と拡張性を維持するのに役立っています。

ただし、1 枚以上の写真を削除することを選択したユーザーに対処するための最善の方法と考えられるもの. 現在、写真を削除すると、すべてのフォロワーのアクティビティ ストリームに壊れた画像リンクが表示されます。

したがって、これに対処する 2 つの方法のいずれかを選択する必要があります。

  1. アクティビティ ID を photo テーブルに保存し、ユーザーが写真を削除すると、その写真に関連するアクティビティを削除します。これは問題なく機能しますが、ユーザーのアクティビティがストリームから削除されることがあります。
  2. 写真テーブルで削除済みとして画像にフラグを立て、ストリーム表示の生成時に「この画像はユーザーによって削除されました」というメッセージを表示します。

どのアプローチを採用するのが最善と考えられますか?またその理由は何ですか? あるいは、人々が推奨する、これに対処するための他のより良い方法はありますか?

どうもありがとう。

4

1 に答える 1

2

IMOは、これをできるだけ透明にするのが最善です。画像が削除されたことを他のユーザーに伝え、アクティビティ ストリームからエントリを削除するオプションを提供します。そうすれば、ユーザーはコントロールを維持し、バックグラウンドで「魔法」が発生することはありません。おそらく、非常に古いエントリ (これが現在の状況で何を意味するか) については、アイテムを自動的に削除できます。しかし、私は常にそれぞれの情報を取得することを好みます。

于 2013-03-08T20:57:56.350 に答える