Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

バッチ処理の計算量改善 #1

Open
monkukui opened this issue May 13, 2021 · 1 comment
Open

バッチ処理の計算量改善 #1

monkukui opened this issue May 13, 2021 · 1 comment

Comments

@monkukui
Copy link

WHAT

https://github.com/HUITGroup/member-bot/blob/main/batch.go#L45
ここで serchRoleMembers たくさん呼んでいるので、計算量改善の余地があると思います。

現状、

  • n := ギルドのメンバー数
  • m := ギルド全体のロール数
  • k := 個人が持つロール数の最大値

として、O(nmk) の時間がかかっています。

これを O(nk + m) に改善します。

処理対象のメンバーは、

  1. 本日退会のメンバー
  2. 明日退会予定のメンバー
  3. 一週間後退会予定のメンバー

の三種類なので、それぞれに対して serchRoleMembers を呼んで、よしなに処理をすればいいです。

何らかの不具合で、kick されるべきメンバーが漏れてしまい、過去の時刻を role として持つメンバーが残った場合、ずっと kick されないという問題があります。

これは別処理で、O(m) かけて、過去の時刻を role として持つメンバーが存在しないか確認しましょう(このような状況が生じるのは正常系ではないので、計算量としては考えないことにします)

@shoumoji shoumoji transferred this issue from HUITGroup/member-bot Jun 6, 2021
@shoumoji
Copy link
Member

shoumoji commented Jun 6, 2021

まだ改善できてないので、今後行います

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants