シャーディングしない場合
読み取りレプリカ、パーティショニング、より大きなサーバーで大半のスケール問題は解決できます。シャーディングが適切でない場合を理解します。
「シャーディングしない場合」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。
シャーディングは最後の手段
シャーディングは運用の複雑さを何倍にも増やします。ほとんどのアプリケーションでは必要ありません。まずはより単純な選択肢をすべて検討してください。
ステップ1:垂直スケーリング
より大きなサーバーに移行します。最新のクラウドインスタンスなら、簡単に次の規模を処理できます:
- 128コア
- 1 TB RAM
- 50,000 IOPSのNVMe
これは、単一のPostgresノードで100k〜500k QPSに相当します。ほとんどのアプリケーションには十分な性能です。
ステップ2:リードレプリカ
読み取りが中心であれば、レプリカを追加します。1つのプライマリと3つのレプリカで、読み取り性能を10倍にできる場合があります。
ステップ3:キャッシュ
頻繁にアクセスされるクエリの前段にRedisやmemcachedを配置します。多くの場合、最も低コストで効果を得られます。
ステップ4:パーティショニング
ネイティブPGの宣言的パーティショニングは、単一サーバー内で「テーブルが大きすぎる」問題に対処します。シャーディングより100倍簡単な場合もあります。
ステップ5:サービスの分割
異なるドメインを異なるデータベースに移します。orders DB、users DB、analytics DBなどです。それぞれを独立してスケールできます。
ステップ6:分析処理を分離
OLTPクエリはPostgresで処理し、分析クエリはClickHouse / BigQuery / Snowflakeで処理します。「シャーディングが必要だ」と考えているケースの多くは、実際には「分析処理がOLTPを圧迫している」状態です。
その後で、必要ならシャーディング
OLTPのみで50TBのデータを扱ってもなお容量が不足し、1台のサーバーでは処理できない書き込み性能が必要になったら、シャードの計画を始めます。
シャーディングの運用コスト
- 監視とパッチ適用が必要なサーバーが増える
- シャード間のバックアップを調整する必要がある
- シャード横断クエリの処理がアプリケーションコードに及ぶ
- リシャーディングが困難
- ホットシャードには継続的なリバランシングが必要
「遅くシャード化する」戦略
シャーディングを意識したパターンで構築し、後からシャード化できるようにします(常にtenant_idを含め、グローバルにインクリメントするカウンターは使用しません)。ただし、必要に迫られるまではシャード化しないでください。
シャーディングに適したスキーマ
単一ノードのまま運用する場合でも、シャード化する可能性を考慮して設計します:
- すべての行にTenant_id
- UUIDまたは分散ID(オートインクリメントではないもの)
- グローバルに一意なシーケンスを使用しない
- 外部キーをテナントの範囲内に限定
トレードオフを認識する
シャーディングは、機能性を犠牲にして容量を増やします。JOIN、トランザクション、クエリが難しくなります。その効果に見合う価値があることを確認してください。
まとめ
シャーディングは現実の問題を解決しますが、負担も大きい方法です。
- まず垂直スケーリング
- リードレプリカとキャッシュ
- シャーディングの前にパーティショニング
- OLTPから分析処理を分離
- シャード化を前提に設計し、実際のシャード化は先送り
確認問題
OLTPクエリが遅いため、シャーディングを検討しています。シャーディングの前に、最も効果が期待できる対策は何でしょうか。
よくある質問
「シャーディングしない場合」レッスンは無料ですか?
はい。「シャーディングしない場合」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。
「シャーディングしない場合」で何を学びますか?
読み取りレプリカ、パーティショニング、より大きなサーバーで大半のスケール問題は解決できます。シャーディングが適切でない場合を理解します。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
SQL Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSQL Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「シャーディングしない場合」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSQL Academyレッスンでコードを書いて実行できますか?
はい。すべてのSQL Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。