0

ユーザーをより速く検索できるようにする必要があります。memcacheを使用しない検索には8秒かかります。現在、私のコードはNot Dot Netの助けを借りてmemcacheを利用しており、検索時間を4秒に短縮しています。今の私の質問は、どうすればそれを速くすることができるかということです。

qUserSearch = Utilities.deserialize_entities(memcache.get("qUserSearch"))
if not qUserSearch:
    qUserSearch = db.GqlQuery("SELECT * FROM User ORDER BY created DESC").fetch(100000)
    memcache.add("qUserSearch", Utilities.serialize_entities(qUserSearch))

searchLength = len(searchData) 
hits = []
gotHits = False

for u in qUserSearch:
    searchEmail = u.email[0:searchLength]
    if searchEmail == searchData:
        hits.append( u.key() )
    else:
        # Since I only search for the first x chars
        # will there never be hits after it's had hits
        if gotHits:
            break 
return hits

私の最初のアイデア:

  • ndbに変換し、SELECTのみ、必要なデータFROMユーザー
  • SQLの方法では、データの少ないテーブルを作成します。ユーザー名とメタデータへのキーのみ
  • 新しい全文検索
  • サードパーティの開発者による古い検索可能なモデル
  • Memcacheに必要なのは、すべてではなく、プロパティとトラベレーゼだけです。

それとも他のアイデアがありますか?私が最も時間を節約できると思うのはどれですか?

4

1 に答える 1

3

2 つの不等式フィルターを使用して達成しようとしているプレフィックス検索をシミュレートすることもできます

db.GqlQuery("SELECT * FROM User WHERE email >= :1 AND email <= :2", searchData, unicode(searchData) + u"\ufffd")

注: この回答は、質問Google App Engine: Is it possible to do a Gql LIKE query?に対する 2 番目の回答から取得したものです。.

于 2012-08-22T18:16:17.360 に答える