我有一个包含1000个实体的Kind XXX_account。 Kind文件大小为3 mb。每当我发送请求时,都需要调用Query来查找Kind中的某个实体。因此,我认为在短短20个小时内谷歌费几乎是4美元。
无论如何都要减少数据存储区的读取操作?我打算在txt文件中存储1000个实体,这样我每次都需要读取数据存储区。
Datastore Read Operations 5.01 Million Ops 4.96 $0.70/ Million Ops $3.48
我的model.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美元。
答案 0 :(得分:1)
您应该在查询实体的位置发布模型定义和代码。
常见建议:
如果你想找到某些实体,那么只有一种正确的方法 - 使用实体密钥(id
数字或key_name
字符串)来得到它。数据存储在保存时会自动为实体分配一些ID,或者在创建实体时可以手动设置一些漂亮的key_name。
要获取实体的id或key_name,请使用DB中的Model.key()。id()或Model.key()。name()或NDB中的Model.key.id()。
然后,如果您使用旧的数据库API或Model.get_by_id()方法(如果您正在使用新的NDB API),则可以通过id或key_name使用Key.get()或Model.get_by_key_name()方法获取实体。您可以将id或key_name传递给网址 - http://example.com/getentity/ [id]。
此外,使用Memcache缓存实体。缓存可以极大地减少使用数据存储区。顺便说一句,NDB自动使用缓存。
P.S。对不起,我发不到2个以上的链接。