データのパーティション化を考える

ユーザーをある規則で10個くらいに分類したい、
処理を分割しておこないたい。

サービス運用していると、わりとよくある話ではないでしょうか。

 

ユーザーIDであれば、1から999をAグループ、1000から1999をBグループ、、、など一定数増加ごとに分割するパターンも考えられます。

このやり方であれば、IDが増えればパーティションも増えるわけですが、
場合によっては偏りがでたり、処理を分割しておこなう場合には、分割数を変えたくない、という場合もあると思います。

 

そこで便利なのが、

IDをパーティション数で割った余り+1をパーティション番号

として使うやり方。

 

データ分析の現場で頻繁に使われてるのを見てから、なにかとこの手法に頼っているのですが、
プログラム的には例えばパーティション数を10とすると

ID % 10 + 1

という形で非常にシンプルかつデータの偏りもおきにくいという利点もあります。

パーティション数が変わらない、というのがポイントです。
(もちろんデータ数の増加に合わせたパーティション数の見直しは必要だと思います)