Logstore 内の読み取り/書き込みログは、特定のシャードに格納される必要があります。各 Logstore はいくつかのシャードに分割され、各シャードは、MD5 左閉右開区間です。各区間が重複することはなく、すべての区間を合計すると、MD5 値すべてを合わせたものとなります。

範囲

Logstore を作成する際に、シャード数を指定します。指定したシャード数をもとに、全 MD5 値の合計範囲が均等に自動分割されます。各シャードの範囲には区間があり、MD5 モードで表記し、[0000000000000000000000000000000000、ffffffffffffffffffffffffffffffff] の範囲内である必要があります。

シャードの範囲はすべて左閉右開区間であり、次のキーで構成されます。

  • BeginKey: シャードの開始を示します。 キーはシャードの範囲内です。
  • EndKey: シャードの終わりを示します。 キーはシャードの範囲外です。

シャードに範囲があることで、ハッシュキーを指定してログを書き込み、シャードを分割または結合することができます。なお、データの読み取りには、対応するシャードを指定する必要があります。 ロードバランシングモードまたは指定されたハッシュキーモードを使用してシャードにデータを書き込むことができます。 ロードバランシングモードでは、データパケットは利用可能なシャードにランダムに書き込まれます。 指定されたハッシュキーモードでは、指定されたキーを含む範囲のデータがシャードに書き込まれます。シャードからデータを読み取るには、該当するシャードを指定します。シャードにデータを書き込むには、Server Load Balancer を使用するかハッシュキーを指定します。Server Load Balancer を使用すると、各データパケットは利用可能なシャードにランダムに書き込みます。ハッシュキーを指定することにより、データは指定されたキーの範囲内にあるシャードに書き込まれます。

Logstore にシャードが 4 つあり、この Logstore の MD5 値が [00、ff] である場合、各シャードの範囲は次のようになります。

シャード番号 範囲
Shard0 [00,40)
Shard1 [40,80)
Shard2 [80,C0)
Shard3 [C0,FF)

ログに書き込む際に、ハッシュキーの MD5 のキーに 5F を指定すると、5F を含む shard1 にログデータが書き込まれます。 MD5 キーの値に 8C を指定すると、8C を含む shard2 にログデータが書き込まれます。

読み取り/書き込み容量

各シャードには容量に上限があります。

  • 書き込み: 5 MB/秒、2000回/秒
  • 読み取り: 10 MB/秒、100回/秒

シャード数を計画する際は、実際のデータトラフィックをもとにすることを推奨します。トラフィックが読み取り上限や書き込み上限を超える場合は、都度、シャードを分割し、シャード数を増やしてシャードの読み取り/書き込み領域を増やします。シャードの読み取り書き込み上限よりもはるかに少ないトラフィックであれば、シャードを結合し、シャード数を減らすことを推奨します。レンタル料の削減が図れます。

たとえば、readwrite ステータスのシャードが 2 つあり、最大 10 MB/秒でデータを書き込むことができる場合、14 MB/秒 でリアルタイムにデータを書き込むには、その内のシャード 1 つを分割して readwrite シャード数を 3 に増やすことが推奨されます。リアルタイムにデータを 3 MB/秒で書き込むのであれば、シャードは 1 つで充分なため、2 つのシャードを 1 つに結合することを推奨します。

  • 書き込みの際に、API が 403 または 500 のエラーを通知し続ける場合、Log Service のモニタリング指標を確認し、シャード数を増やす必要があるかどうかを検討します。

  • シャードの上限を超える読み取り/書き込み処理となった場合は、ベストエフォートとなります。

ステータス

シャードのステータスは次のとおりです。

  • readwrite: 読み取り/書き込み可能
  • readonly: 読み取り専用データ

シャードのステータスは、生成時は readwrite です。シャードを分割または結合すると、シャードのステータスは readonly に変わり、新たに生成されるシャードのステータスは readwrite です。シャードのステータスは、データの読み込みパフォーマンスとは関係ありません。readwrite ステータスのシャードへのデータ書き込みパフォーマンスは変わりませんが、readonly ステータスのシャードにデータを書き込むことはできません。

シャードを分割する際は、readwrite ステータスで MD5 で ShardId を指定します。MD5 は、シャードの BeginKey より大きく、EndKey より小さくなければなりません。分割すると、1 つのシャードは 2 つのシャードに分割されます。つまり、シャードは 1 つから 2 つに増えます。指定した元のシャードのステータスは、分割が完了すると、readwrite から readonly に変わります。データを読み取ることはできますが、新たにデータを書き込むことはできません。新たに生成された 2 つのシャードは、readwrite ステータスで、元のシャードの後ろに追加されます。2 つのシャードの MD5 の範囲を合わせたものは、元のシャードの範囲に含まれます。

シャードを結合する際は、readwrite ステータスのシャードを指定します。なお、readwrite ステータスの最後のシャードを指定することはできません。サーバーは指定したシャードとその右隣りのシャードを自動的に結合します。指定したシャードとその右隣りのシャードのステータスは、結合完了時は readonly です。データを読み取ることはできますが、新たにデータを書き込むことはできません。readwrite ステータスのシャードが新たに生成され、MD5 の範囲は、元の 2 つのシャードの全範囲を含んだものになります。