2

無向グラフをGoogleAppEngineデータベースに保存する必要があります。最適化の目的で、データベースインデックスを使用することを考えています。Google App Engineを使用して、データベーステーブルの列を定義してインデックスを作成する方法はありますか?

私のアプリは、アイテムの推奨のためにコンテンツベースのフィルタリングでこの保存された無向グラフを使用するため、いくつかの最適化が必要になります。また、レコメンダーアルゴリズムは、一部のグラフのエッジの重みを更新します。

データベースインデックスを使用できない場合は、グラフテーブルのクエリ時間を短縮する別の方法を提案してください。私のアルゴリズムは、書き込み操作よりもグラフテーブルからのデータ取得操作の方が多いと思います。

PS:私はPythonを使用しています。

4

2 に答える 2

3

おそらくこれが役立つでしょう:http ://code.google.com/intl/sv-SE/appengine/docs/python/datastore/queriesandindexes.html#Defining_Indexes_With_Configuration

于 2010-05-18T17:48:32.413 に答える
1

法外に遅いクエリを実際に見ていますか? 私はそうではないと思います。これはやや時期尚早の最適化だと思います。アプリ エンジン データストアはメモリ内で並べ替え、フィルタリング、結合、またはその他の意味のある操作を実行しないため、クエリ時間は通常かなり一定です。特に、クエリのレイテンシは、データストアのエンティティの数には依存せず、クエリに一致するエンティティの数にも依存しません。求める結果の数にのみ依存します。

関連する注意事項として、データストアにインデックスを追加しても、既存のクエリは高速化されません。クエリにカスタム インデックスが必要な場合、それがなくてもパフォーマンスが低下したり、実行が遅くなったりすることはありません。インデックスを追加するまで、クエリはまったく実行されません。

あなたが言及した特定のクエリについてはselect * from edges where vertex1 == x and vertex2 == y、データストアはカスタム インデックスなしでそれを実行できます。詳細については、ドキュメントのこのセクションを参照してください。

要するに、必要なクエリを実行するだけで、インデックスについてあまり考えたり、DBA であるかのように最適化しようとしたりしないでください。リレーショナル データベースではありません。:P

于 2011-01-25T23:15:45.490 に答える