パーティション
1台に収まらなくなったら分ける
複製は同じものを何台にも置く手でした。パーティションは違うものを別の台に置く手です。
予約が1台に入りきらなくなったら、予約IDで台を決めて分けます。これをシャードと呼びます。
分け方は、鍵から数を作って台数で割った余りを使います。
Python
# 文字の符号を足して、台数で割った余りが置き場所
# "r-101" → 余りが 0 なら 0番の台へ入れるときは困りません。読むときに困ります。
どこに入れたかを覚えておく表が要り、その表がまた1台に収まらなくなります。鍵から計算で出せば、表が要りません。
分ける鍵を間違えると偏る
鍵の選び方で、台ごとの量が変わります。
公演IDで分けると、人気公演の台だけがいっぱいになります。予約IDで分ければ、どの台にもばらけます。
速いです。ただし発売開始の瞬間に、その台だけが全部の書き込みを受けます。
まとめて読みたい都合と、負荷をばらけさせたい都合はぶつかります。どちらを取るかが、シャードキーを選ぶということです。
演習
予約IDの一覧と台数を受け取り、それぞれの置き場所と台ごとの件数を返します。
要件
- 置き場所は、鍵の文字の符号をすべて足した数を台数で割った余り。符号は ord で取れる
- assignments は鍵から置き場所への辞書。並びは受け取った ids と同じ順
- counts は台ごとの件数を並べたリスト。長さは台数と同じで、1件も来ない台も 0 で入れる。台数が 0 以下なら両方とも空にする
ヒント
編集 ゆめさく編集部