シャーディングはAuroraで適用できるのか。

シャーディングはAuroraで適用できるのか。
できます。
「オンライントランザクション処理 (OLTP) 環境では、大量の書き込みまたはトランザクションが単一のデータベースの容量を超えることがあり、スケーラビリティが懸念される場合、シャーディングは常に追求する価値があります。Amazon RDS の登場により、データベースの設定と運用は大幅に自動化されました。これにより、シャードデータベースアーキテクチャを扱う作業がずっと簡単になります。Amazon RDS は、Amazon RDS for MySQL、MariaDB、PostgreSQL、Oracle、SQL Server、およびAmazon Aurora を含むデータベースエンジンのセットを提供します。これらのいずれかを、シャードデータベースアーキテクチャのデータベースシャードの構成要素として使用できます。」 Zeng

要は、
基本的にOLTPではスケーラビリティ心配だったら、シャーディングを考えるに越したことはない。
AWSが提供するRDSのエンジン（MySQL、MariaDB、PostgreSQL、Oracle、SQL　Server）含めAuroraはシャードの構成用として使える！

「データベースシャードのシステムリソース使用量が多く、より多くの処理能力が必要な場合は、スケールアップまたはスケールアウトのどちらかになります。Amazon RDS にはプッシュボタン式のスケールアップオプションがあります。これを使用してDB インスタンスクラスをより多くの CPU と RAM を備えたより大きなハードウェアに変更したり、DB インスタンスストレージを変更したりしてより多くの記憶領域と IOPS 容量を確保できます。使用可能なインスタンスクラスの選択は、データベースエンジンやデータベースのバージョンによって異なります。AWS マネジメントコンソールはそれを確認するのに適した場所です。
データベースシャードを構築するために Amazon RDS for MySQL または PostgreSQL を選択した場合は、もう 1 つのスケールアップオプションがあります。Amazon Aurora DB クラスターへの移行です。Aurora DB クラスターは、Amazon RDS DB インスタンスよりも高いパフォーマンスと IOPS キャパシティを実現するために、クラスター化されたストレージボリュームの上にある複数のデータベースインスタンスで構成できます。Amazon RDS には、Aurora リードレプリカを作成するためのプッシュボタンオプションがあります。このオプションは、MySQL または PostgreSQL の Amazon RDS DB インスタンスから Aurora リードレプリカにデータを移行するためのレプリケーションプロセスを設定します。データの移行が完了したら、Aurora リードレプリカをスタンドアロン Aurora DB クラスターに昇格させることができます。」 Zeng

AWSではRDSをプッシュボタン式でスケールアップできる。
MySQLやPostgreSQLだとさらにAuroraDBクラスターにスケールアップできる。

リシャーディング… 新しいシャードの追加、既存シャードの分割、マージをしてスケールアウト、インをすること。
AWSはリシャーディングの機能も備えている。「
![ああ.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517424/1f85a42f-b109-95a7-43ee-3d0e5fde3cef.gif)

１. リードレプリカは、マスターデータベースからデータを継続的に複製するために作成します。
２. マスターデータベースは、リードレプリカが同期して新しいスタンドアロンデータベースに昇格できるように、書き込みアクティビティを保留します。この間、アプリケーション層のマッピングおよびルーティングロジックは、マスターデータベース上の複数のデータパーティションのステータスを読み取り専用に更新します。
３. データマッピングおよびルーティングロジックは、接続を新しいデータベースにルーティングするように変更されます。」Zeng

上記のプロセスでAWSはシャードをコピーしてくれる。

読み進める
「データベースシャードを構築するために Amazon Aurora DB クラスターを選択した場合、そのリードレプリカはストレージボリュームをプライマリインスタンスと共有します。したがって、それらを使用して Aurora クラスター間でデータを複製することはできません。代わりに、Amazon RDS はソースデータベースと同じデータで新しい Amazon Aurora DB クラスターを作成するためのクローンデータベース機能を提供します。Aurora MySQL DB クラスターの場合、データを別の新しい Aurora MySQL DB クラスターに複製するために MySQL レプリケーションを設定するオプションもあります。」Zeng

つまりAuroraではリードレプリカはプライマリとストレージボリュームを共有するのでクラスタ間でデータの複製はできないが、同じソースでクローンのデータベースを作成する機能を提供している。

Auroraアップデータ使いこなし術
「シャーディングではアクセスするレコードを特定のDBインスタンスに固定化します。するとレコードによってアクセス先のDBインスタンスが異なり、更新の競合が発生しにくくなるので各クエリの実行性能が低下しにくくなります。
通常のMySQLをシャーディングする場合はデータはシェアードナッシングになるので、ホットデータなどの影響を是正するためにリシャーディングする場合データの再配置が必要なので手間がかかります。しかしAuroraの場合は単一のボリュームを共有しているためデータの再配置が不要となります。」こなし術

ZengのAuroraのリシャーディングの解釈をポジティブにとらえると、
通常MySQLでのリシャーディングはデータの再配置などをしなければいけないところ、
Auroraはプライマリインスタンスとストレージボリュームを共有しているのでリシャーディングの際のデータの再配置は不要になるということ。

SpiderとRDSの関係性
この人はMariaDBでSpiderを動かしている
MariaDB 10.3 で Spider Storage Engine を試す

なんでAuroraでもSpider動くんじゃないですかね・・・

“Aurora provides users with a bare-bones database created using a cookie-cutter template intended to meet the least common denominator. While MariaDB Platform can scale out reads, writes and storage with transparent sharding via the Spider storage engine, or benefit from write- and space-optimized storage on SSDs via the MyRocks storage engine (developed by Facebook), Aurora has neither. It is limited to the InnoDB storage engine.”　Four Things You Didn’t Know About Aurora
“訳：MariaDBプラットフォームは、Spiderストレージエンジンを介して透過的なシャーディングを使用して読み取り、書き込み、およびストレージをスケールアウトでき、Facebookが開発したMyRocksストレージエンジンを介してSSDの書き込みおよびスペース最適化ストレージのメリットを享受できますが、Auroraにはありません。 InnoDBストレージエンジンに限定されます。”

マリアだけだった…(今んところは)

あ、でも
シャードデータベースでマルチマスタークラスターを使用する
「Bring-your-own-shard (BYOS) は、既にシャード/パーティション化されたデータベースとそれにアクセス できるアプリケーションがあるユースケースを示します。シャードはすでに物理的に分離されています。 そのため、スキーマ設計を変更することなく、ワークロードを Aurora マルチマスタークラスターに簡単に 移動することができます。同一のシンプルな移行パスがマルチテナントデータベースに適用されます。ここで、各テナントでは、専用テーブル、テーブルセット、またはデータベース全体を使用します。」公式
BYOSで先にSpiderでシャードしたMySQLデータベースをそのままAuroraにスケールアップすればできるのかもしれない。（後日やってみることにする）

おわり