2

私は 1000 個のエンティティを持つ Kind XXX_account を持っています。種類のファイル サイズは 3 MB です。リクエストを送信するたびに、Kind 内の特定のエンティティを見つけるためにクエリを呼び出す必要があります。したがって、Google の料金はわずか 20 時間でほぼ 4 米ドルになると思います。

データストアの読み取り操作を減らす方法はありますか? 毎回データストアを読み取る必要があるように、1000 個のエンティティを txt ファイルに保存する予定です。

Datastore Read Operations       5.01 Million Ops    4.96    $0.70/ Million Ops  $3.48   

私のモデル.py

class MyUser(DatastoreUser):
    pass

class XXXAccount(db.Model):
    user = db.ReferenceProperty(MyUser,
                                   collection_name='xxx_accounts')


    id = db.StringProperty(required=True)
    created = db.DateTimeProperty(auto_now_add=True)
    updated = db.DateTimeProperty(auto_now=True)
    name = db.StringProperty(required=True)
    username = db.StringProperty(required=True)
    profile_url = db.StringProperty(required=True)
    aaa = db.StringProperty(required=True)
    bbb = db.StringProperty(required=True)

view.py

@login_required
def updateprofile(request):
    number_form = NumberForm()
    if request.method =="POST" and number_form.validate(request.form):
        acc_num_str = number_form['nb']  
        acc_num = int(acc_num_str)

        current_user = request.user
        xxx_account = current_user.xxx_accounts[acc_num] #Query
        DO SOME THING WHICH DOES NOT RELATED TO READ AND WRITE DATASTORE OPERATION
return......

アップデート:

  • コードを掲載しました

  • OMG、わずか 1000 件のリクエストで 0.32 米ドル。

4

1 に答える 1

1

エンティティのクエリを実行するモデル定義とコードを投稿する必要があります。

一般的な推奨事項:

特定のエンティティを見つけたい場合、正しい方法は 1 つだけです。エンティティ キー (id数値またはkey_name文字列) を使用して取得します。Datastore は、エンティティを保存するときにエンティティに ID を自動的に割り当てます。または、エンティティの作成時に適切な key_name を手動で設定できます。

エンティティの ID または key_name を取得するには、DB では Model.key().id() または Model.key().name() を、NDB では Model.key.id() を使用します。

次に、古い DB API を使用している場合は Model.get_by_id( )メソッドまたはModel.get_by_key_name()メソッドを使用して、新しい NDB API を使用している場合はKey.get() メソッドを使用して、id または key_name でエンティティを取得できます。id または key_name を URL - http://example.com/getentity/[id] に渡すことができます。

また、Memcache を使用してエンティティをキャッシュします。キャッシングにより、データストアの使用が大幅に減少する可能性があります。ちなみに、NDB は自動的にキャッシュを使用します。

ps 申し訳ありませんが、2 つ以上のリンクを投稿することはできません。

于 2013-03-23T09:24:08.130 に答える