1

jinja2をテンプレートシステムとして使用して、PythonでGoogle App Engine上にWebアプリケーションを作成しています。このアプリでは、基本的に、ユーザーが投稿/コメントを書き込んだり、他のユーザーの投稿をランク付けしたりできます。ランキングシステムは、賛成/反対の数とコメントの数に基づいています。memcacheを使用してこの計算値を保存し、それに応じて投稿をランク付けしようとしています。

書き込みコストが高くならないように、たまに値をデータベースに保存したいだけです。カウンターを設けて、10票/コメントごとにデータベースに保存する予定です。私はこのようなことを考えていました:

# I update the counter every time that I add a vote or comment
counter = 0
def posts_cache(update = False):
        global counter
        key = 'main'
        posts = memcache.get(key)
        if posts is None or update:
                logging.error("DB QUERY")
                posts = db.GqlQuery("SELECT * "
                                        "FROM Post "
                                        "ORDER BY rank DESC "
                                        "LIMIT 100",
                                         key)
                posts = list(posts)
                memcache.set(key, posts)
        if counter>=10:
                counter = 0
                #put the memcache posts in the database
        return posts

しかし、memcacheにある投稿を取得して、データベースに保存する方法がわかりません。Pythonでこれを行う方法はありますか?ドキュメントを調べましたが、明確な方法が見つかりませんでした。

4

1 に答える 1

1
  1. memcacheはエンティティを削除でき、データが失われるという意味で信頼性が低いため、これを行うことはできません。
  2. エンティティをまとめて保存しても、コストは低くなりません。エンティティの配置ごとに支払います。
  3. 書き込みコストを下げるには、インデックスを作成する必要のない属性にindexed=falseを設定してみてください。
于 2012-07-05T17:02:30.850 に答える