TLサンプリング
Summary
ストリーミングの接続ごとに、ある投稿がLTLに流れるかどうかランダムにできるようにする
サンプリング確率は管理者が設定できる
- LTLが速すぎる場合の負荷低減
- LTLが速すぎる場合に速すぎて見れなくなる問題への対応
- LTLが速すぎる場合の負荷低減
- LTLが速すぎる場合に速すぎて見れなくなる問題への対応
まず user.showTimelineRenotes があった方が良さそう
規模によってはHTLサンプリングも要りそう
流速は時間帯によって大幅に異なるので、確率を設定できるというよりも最大流速を設定できるようにして、それを上回ったらシステムで自動的に設定した流速になる確率を算出してサンプリングするようにした方が良さそう
規模によってはHTLサンプリングも要りそう
私のことかな(まもなく6000フォロー)
NotesPerMinutesを計算するには最低1分は時間がかかるから、それまでの間どうするかという問題がある
ストリーミング繋いで最初の1分間だけ猛烈に速く流れる or 全く流れない のどちらかにするしかなさそうな感じ
とはいえ1分経つと流れが変わるというのも不自然だしなあ
LTLならだれが繋いでも流れるものは基本同じだからストリーミング接続ごとにNPM計算しないでも良いから上記の問題は起きないけど、HTLとかSTLはユーザーごとに異なるからなあ
NotesPerMinutesじゃなくてNotesPerSecondsを基準にすれば解決するかも
でもNPS基準にすると流れが猛烈に速いサーバーでない限りあまり有効に動作しなさそう
数学詳しくないんだけど1分待たずとも(精度は荒くなるものの)NotesPerMinutes計算できそうな気はする
なんもわからん
npsを60倍すればnpmになる
どう計算するかにもよるけど、私の実装した方法(MkClickerGameと同じ方法)だと、1分間にいくつも投稿があったとしてもたまたま計測した範囲に投稿が無いとnpsが0になるからそれを60倍しても0になっちゃう
(要するにnpsが0.5みたいに少数になることが絶対にない)
計測の仕方変えるか...
ストリーミングを開始したときから1→30秒おきぐらいにnps(m)を評価し続けてそのたびに挙動を変えるとか
ランダムに投稿が選ばれるの自体微妙じゃね感
(できればストリーミングでは投稿をすべて見たいし(なんとか見れるようなUIを作るべきでは)、流行っているNoteを見たいならfeaturedのhome版を作ればいい)
例えば1秒間に100個くらい投稿が流れてくるとするとどう頑張っても全部見れるUIというのは厳しいし回線負荷がやばそう
たしかになぁ
完全にランダムにするかは検討の余地があるけど、なんにせよ間引く必要がある
どれくらい間引くようにするかは管理者設定にする予定だけどユーザー設定でも良さそう
ユーザー設定にするか
こんな感じかしら

ロールごとにweightを設定できるようにして、weightが高いロールを持つユーザーを優先して選択するようにすると良さそう
やらないといけなくなってきた