ポアソン到着とタイムスタンプ

はじめに

ここでは以下の問題を考えます.

衝突確率とタイムスタンプの間隔,リクエストの到着率の関係は [1] で既に議論されているので,ここではもう少し具体的な数値を挙げて計算します.

衝突確率

ポアソン分布に従って,一定期間(たとえば1日)の間にリクエストが平均 λ 件到着する状況を考える. 期間を N 等分したタイムスタンプを用いてリクエストを処理するとする. このとき,リクエストのタイムスタンプが衝突する確率 p を求めたい. そのために,余事象として衝突しない確率を考える. 最初のタイムスタンプ1区間のうちに1件到着し,以降1件も到着しない確率は λ N ⁢ e - λ / N × e - λ / N × ⋯ × e - λ / N = λ N ⁢ e - λ である. タイムスタンプを1つ選ぶ方法は N 通りあるので, 一定期間のうちに1件到着し,なおかつタイムスタンプが衝突しない確率 q1 は q 1 = N × λ N ⁢ e - λ となる. 次に,一定期間のうちに2件到着する場合を考える. たとえば,最初のタイムスタンプ2区間のうちに1件ずつ到着し,以降1件も到着しない確率は λ N ⁢ e - λ / N × λ N ⁢ e - λ / N × e - λ / N × ⋯ × e - λ / N = ( λ N ) 2 ⁢ e - λ である. タイムスタンプを2つ選ぶ方法は N ⁢ ( N - 1 ) / 2 通りあるので, 一定期間のうちに2件到着し,なおかつタイムスタンプが衝突しない確率 q 2 は q 2 = N ⁢ ( N - 1 ) 2 × ( λ N ) 2 ⁢ e - λ となる. 同様にして,一定期間のうちに k 件到着し,なおかつタイムスタンプが衝突しない確率 q k は,二項係数を用いて次のように書ける. q k = ( N k ) ⁢ ( λ N ) k ⁢ e - λ

よって,二項定理より衝突する確率 p は以下のようになる. p = 1 - ∑ k = 0 N q k = 1 - ∑ k = 0 N ( N k ) ⁢ ( λ N ) k ⁢ e - λ = 1 - e - λ ⁢ ( 1 + λ N ) N

また,到着率 λ について整理すると, ランベルトのW関数を用いて次のように書ける. λ = - N ⁢ ( W -1 ⁡ ( - 1 - p N e ) + 1 )

近似式

α = λ / N とおく. e - x のテイラー展開を使うと次式を得る. p = 1 - e - λ ⁢ ( 1 + λ N ) N = 1 - ( 1 + α e α ) N ≈ 1 - ( 1 - α 2 2 ) N これと ( 1 - x ) N ≈ 1 - N ⁢ x より衝突確率 p は次のように近似できる. p ≈ N ⁢ α 2 2 = λ 2 2 ⁢ N

また,リクエストの到着率 λ は次のように近似できる. λ ≈ 2 ⁢ N ⁢ p

数値例

1日あたりの衝突確率を1%まで許容しながらリクエストを秒単位のタイムスタンプで処理する場合, どのくらい多くののリクエストを処理できるか考えます. 1日は86400秒なので N = 86400 , p = 0.01 となる到着率 λ を求めればよいです. λ ≈ 2 × 864 = 24 ⁢ 3 ≈ 42 実際には41.68件/日なのでそこそこ正確です. 1日あたり1%まで許容しても40件程度しか処理できないのは意外でした. ミリ秒単位で処理する場合は λ ≈ 2 × 864000 ≈ 1315 となり,およそ32倍のリクエストを処理できるようになります. 1000倍にならない点が誕生日のパラドックスに似ているかもしれません. 他のケースについて計算した結果を以下に示します.

期間 間隔 衝突確率 到着率
1日 1秒 1% 42件/日
1日 1秒 0.1% 13件/日
1日 1秒 0.01% 4件/日
1日 1ミリ秒 1% 1300件/日
1日 1ミリ秒 0.1% 420件/日
1日 1ミリ秒 0.01% 130件/日
1年 1秒 1% 800件/年
1年 1秒 0.1% 250件/年
1年 1秒 0.01% 80件/年
1年 1ミリ秒 1% 25000件/年
1年 1ミリ秒 0.1% 7900件/年
1年 1ミリ秒 0.01% 2500件/年

更新履歴

  • 2023-06-14: 公開

Permanent ID of this document: 834c86967799b6e69d4c5ea9fbb76c8b

参考文献

[1] wass80 (2023年5月26日). 「[訂正あり] 秒単位で衝突するファイル名をミリ秒単位に改善すると、1000倍安全になる」. wassのメモ書き. http://memo.wass80.xyz/2023-05-26-poisson-collision/, (2023年6月14日閲覧).