0

私はGoogle Datastoreを使用しており、一部のエンティティを取得するためにクエリを実行する必要があります。これらのエンティティは、最新のものから古いものにソートする必要があります。私の最初の考えは、タイムスタンプを含むdate_createdプロパティを持つことでした。私はこのフィールドをインデックス化し、このフィールドをソートします。この方法の問題点は、データベースにホットスポットが発生することです(https://cloud.google.com/datastore/docs/best-practices)。Google datastore - ホットスポットを持たない日付作成フィールドのインデックス

単調増加値(NOW()タイムスタンプなど)でプロパティをインデックス付けしないでください。このようなインデックスを維持すると、読み込み速度と書き込み速度が高いアプリケーションでCloud Datastoreのレイテンシに影響するホットスポットが発生する可能性があります。

明らかに、日付に関するデータの並べ替えは、データベースで実行される最も一般的な並べ替えです。タイムスタンプのインデックスを作成できない場合は、キューポイントをホットスポットなしで最新のものから古いものに並べ替えることができる別の方法がありますか?

+1

[データストアで日付を保存するにはどうすればいいですか?](http://stackoverflow.com/questions/41690158/how-can-i-store-the-date-with-datastore) –

答えて

3

単調に変更された値のインデックスを作成すると、縮尺が変更されず、ホットスポットが作成される可能性があります。潜在的にこの影響を受けるかどうかは、特定の用途によって異なります。

一般的に、このパターンのホットスポットポイントは500回/秒です。あなたが間違いなくそのことにとどまることが分かっているなら、おそらく心配する必要はありません。

1秒あたり500を超える書き込みが必要であるが、上限があることを覚えている場合は、断片化アプローチを試みることができます。基本的に、1秒あたりの書き込みの上限がxならば、n =天井(x/500)です(nはシャードの数です)。あなたのタイムスタンプを書くときは、先頭にrandom(1、n)を付けてください。これにより、1秒あたり最大500回の書き込みを実行できるn個のランダムなキー範囲が作成されます。データを照会するときは、n個の照会を発行し、クライアント側で結果ストリームをマージする必要があります。

関連する問題