質問
dokoQLでは、最大実行回数に制限が存在しますが、それはどうしてですか。
回答
SQL実行リクエストを処理するサーバー群について、ステートレス性とスケールアウト性を確保するためのアーキテクチャ設計を採用しているためです。
- dokojavaやdokoCと異なり、dokoQLはその特性上、ユーザーからのSQL実行リクエストの間、クラウド上にユーザーデータ(ステート)を保持し続ける必要があります。また、システム安定性や性能確保のために複数のサーバー群で稼動する一方、ステートが存在するサーバーインスタンスしか同一ユーザーのSQL要求を実行できません。結果的にスケールアウト性に重大な制約が生じるため、dokoQLではこのようなアーキテクチャを採用していません。
- dokoQLでは、サーバーシステム側にステートを保持せず、リクエストの度に「過去に実行した全SQL文(以下、ヒストリ)」も含めて毎回サーバーに対して送信しています。サーバー側では、毎回ヒストリ部分のSQL文も再実行してステートを復元(ロールフォワード)の上、最新のSQL文を実行しています。
- dokoQLが採用するアーキテクチャでは、サーバー群内の任意のインスタンスがリクエスト応答することが可能となる一方で、「ヒストリが深くなるほど、サーバーによるロールフォワード処理の負荷が蓄積的に増大する」というデメリットが存在します。そのため、サーバー保護のためにヒストリの深さが一定以上にならないよう制限を行っています。