シャーディング時のデータ分散、ID採番戦略
データをどう分散するかに加えて、ID採番も考える必要がある
データ分散の戦略
- fixed mapping
id % shard
で求めるやつ。shard数が変わると計算結果が変わるのがネック
- dynamic mapping
- mixed mapping
- explicit mapping
- instagramやpinterestが採用している方法。idの中にシャード番号も織り込む。欠点はシャードキーにそのidを使えない制約がある場合。
ID採番の戦略
- 採番テーブルを使う
- MySQLそのもののauto_increment
- RedisなどInMemoryDBで一元管理
- UUID
感想
- データ分散をexplicitにした場合、必然的にID採番はオリジナルUUIDになる
- mixed mappingは割りと柔軟性があると思う。しかし、ID採番をどうするか、またhash to shardのLOOKUPテーブルをどうやって生成してどこに保持するか。など考えるべき事項が多い。