Workers Analytics Engine よくある質問
以下に、よくある質問への回答を示します。
いいえ、大量のインデックス値を追加することには欠点があります。トレードオフとして、多くのインデックスを読み取るのは遅くなります。
実際には、ABRの動作により、1つのクエリで多くのインデックスから読み取ると、低解像度のデータが得られます。場合によっては、使えないほど低い解像度になることもあります。
一方で、データの読み取り方法に合った良いインデックスを選択すれば、クエリは速く実行され、高解像度の結果が得られます。
インデックスフィールドに複数の値を連結することは可能です。たとえば、ユーザーIDとホスト名でインデックスを作成したい場合、インデックスフィールドに "$userID:$hostname" と書くことができます。
クエリパターンに基づいて、異なるインデックスで同じデータセットを書くことが理にかなっている場合があります。「ダブルライティング」を避けるべきだというのは一般的な誤解です。
サンプリングのおかげで、データを複数回書き込むコストは比較的低く抑えられます。しかし、非効率的にデータを読み取ると、サンプリングによる重大な費用や低品質の結果が生じる可能性があります。
_sample_interval フィールドを使用できます — ただし、これは結果が正確かどうかを示すものではありません。
データが読み取り時にサンプリングされているかどうかは、サンプル間隔が10の累乗の倍数になるため、たとえば 20 や 700 などで判断できます。読み取り時にサンプリングが開始される明確なルールはありませんが、実際には長い期間(またはより多くのインデックス値)を読み取ると、サンプル間隔が高くなります。
サンプリングは主にインデックスの選択や、クエリされた時間範囲、読み取られたインデックスの数などの要因に基づいています。より大きなインデックスから長期間にわたって読み取っている場合、そのインデックス内の比較的小さなサブグループにフィルタリングしていると、サンプリングのために存在しない可能性があります。
そのサブグループの正確な結果を読み取る必要がある場合は、そのフィールドをインデックスに追加することをお勧めします(複数の値でインデックスを作成する必要がある場合はどうすればよいですかを参照)。
サンプリングされたデータは非常に信頼性が高く、特に慎重に選択されたインデックスが使用されている場合はそうです。
確かに、現在のところ、ABRクエリによって返される結果が特定の誤差範囲内にあることを証明するのは難しいです。一般的な目安として、count() を使用して読み取った行数を確認することが良いです — これは画像のピクセル数のカウントのように考えてください。読み取った行数が多いほど、結果はより正確になります。(逆に、_sample_interval フィールドは結果が正確かどうかについてあまり多くの情報を提供しません)。1行または2行から外挿している場合、代表的な結果が得られる可能性は低いです。数千行から外挿している場合、結果が非常に正確である可能性が高いです。
近い将来、クエリ結果とともに誤差の範囲 ↗を公開する予定ですので、結果がどれほど正確であるかを正確に確認できます。
公平なサンプリングは、グループ間の違いを正規化するためと、特定のインデックスへの大きなトラフィックのスパイクを処理するために存在します。平準化は数秒ごとに行われます。非常に近い時間に多くのイベントを書き込んでいる場合、それらは書き込み時にサンプリングされることが期待されます。特定のインデックスのサンプル間隔は、書き込まれるデータの現在のレートに基づいて、瞬時に変化します。
サンプリングがトリガーされるタイミングを決定する固定のルールはありません。
私たちは、グローバルCDNのようなワークロードでは、各インデックス値がサンプリングが目立つようになる前に、1秒あたり約100のデータポイントを必要とすることを観察しています。
ワークロードやWorkers Analytics Engineの使用方法によっては、サンプリングがこの閾値よりも高いまたは低いところで開始されることがあります。たとえば、単一のワーカー実行から多くのデータポイントを書き出している場合、データがサンプリングされる可能性が高くなります。