つくる 保存設計
1つの表にまとめる
この章で4つを見ました。読み書きの偏り、保存先の選び方、複製、そして分け方です。
今回は新しいことを覚えません。データごとに置き場所と分け方を1つの表にします。
表にする理由は、データごとに答えが違うからです。1つのサービスの中で3つの保存先が同時に使われます。
大変になります。見る所も、壊れ方も、バックアップの手も3つになります。
それでも分けるのは、混ぜたときの損のほうが大きいからです。画像を関係データベースに入れると、予約の読み取りまで遅くなります。
分けるのは関係データベースだけ
シャードは、1台に収まらなくなった所にだけ入れます。
この章で分ける対象は関係データベースです。キーバリューとオブジェクトストレージは、内側で勝手に分かれるので自分で決めません。
Python
# reservation sql シャード番号あり
# session key-value シャードは決めない付けた番号は、付けた時点の台数に縛られます。
キーバリューは台数が変わっても自分で配り直します。自分で決めた番号があると、その配り直しの邪魔になります。 決めなくてよい所は決めません。
演習
データの一覧と関係データベースの台数を受け取り、置き場所・理由・シャード番号の表を返します。
要件
- storage と reason は第23回と同じ。トランザクションが要るなら sql、1048576バイト以上なら object-storage、どちらでもなければ key-value
- sql のものだけ、name を鍵にして第25回のやり方でシャード番号を出す。文字の符号の合計を台数で割った余り
- sql 以外と、台数が 0 以下のときは shard を None にする
ヒント
編集 ゆめさく編集部