0

ストリーム URL を含む、サーバー上の曲に関するデータを返す API を作成しました。クライアントが API を呼び出すと、データが取得され、プレーヤーで曲のストリーミングが開始されます。

しかし、複数のクライアントが API を呼び出すようになったので、最近聞いていないプレイリスト内のランダムな曲に関するデータを返す最良の方法は何ですか? 数千曲あり、まだ拡大中です。

したがって、私の質問は、次の方法が適切かどうかです。

これが私がやろうとしていることです。クライアントごとにセッションを設定し、最初のリクエストですべての曲を取得し、ランダムなリストを生成し、それをセッション ID とともにキャッシュに保存します。その後のすべてのリクエストで、セッション ID を確認し、次の曲データを返しますか?

最近再生した曲を再生しないようにするには、過去 50 曲の履歴をデータベースに保存し、曲 ID を比較して、一致した場合は次の曲を取得しますか?

これは実用的なアプローチでしょうか?

4

2 に答える 2

0

mysqlのようなデータベース、またはIDを曲に関連付けるものを使用していると仮定すると、乱数を生成し、それを使用してデータベースからランダムな曲を選択できます。IDベースのデータストアはこれに対応し、非常に適切に拡張できます。

最高の曲IDがXであることがわかっている場合は、1からXまでの乱数を生成し、それをYと呼びます。次のようなクエリを実行します。

SELECT * FROM songs WHERE song_id>=Y LIMIT 1

それはあなたのIDのギャップを考慮に入れ、本当に速くなります。別のテーブルで再生された曲のログを保持し、それらを除外することができます。クエリが結果を返さない場合は、Y = XYのように乱数を反転してから、クエリを再実行します。

于 2013-01-12T02:26:57.753 に答える
0

編集済み:サーバーの詳細情報を取得しました。

X個の曲をユーザーのリスニング履歴(バッファ、サイズX)に保存します。ランダムな曲をリクエストするための単一の関数を実装します。クライアントが新しいランダムな曲を必要とする場合:

  1. データベースからランダムな曲を選択します
  2. 曲IDをリスニング履歴バッファーにプッシュします。
  3. データをクライアントに返す

とにかくサーバーにユーザーデータを保存することを計画している場合は、実際にはランダムに生成された曲リストを維持する必要はありません。

そうでなければ、あなたはほとんど正しいです。セッションを使用してユーザーを識別します。

于 2013-01-12T00:29:51.153 に答える