我使用 Python 创建了一个 Google App Engine 应用程序。该应用程序处理大量用户名。
它有一个包含 50K 用户名的数据库。每个用户名都有一个唯一的哈希值。它也存储在数据存储中。
当任何应用用户提交任何用户名时。应用程序首先检查用户名是否存在于数据库中。
如果它是一个新的用户名,应用程序为新的用户名计算一个新的散列,并将名称和散列存储在 DataStore 中。
如果用户名已存在于数据存储中,它会从数据存储中检索旧哈希。
示例代码:
class Names(db.Model):
name = db.StringProperty(required=True)
hash = db.StringProperty(required=True)
username = "debasish"
user_db = db.GqlQuery("SELECT * FROM Names WHERE name=:1", username)
user = user_db.get()
if user == None:
#doesn't exist in DB..so calculate new hash for that name and store it in DB
e = Names(name=username,hash="badasdbashdbhasbdasbdbjasbdjbasjdbasbdbasjdbjasbd")
e.put()
else:
#retrieve the old hash.
self.response.out.write('{"name":"'+user.name+'","hash":"'+user.hash+'"}')
我面临的问题是 GAE 的免费数据存储读取操作配额。它超出得太快,我的应用程序停止工作。
我也尝试过实现 memcache,就像这样,在 memcache 中添加整个数据库。但这也是一次失败,结果更加糟糕。
def get_fresh_all(self):
all_names = db.GqlQuery("SELECT * FROM Names")
memcache.add('full_db', all_names, 3600)
return all_names
所以,伙计们可以请你建议,我做错了什么吗?如何更有效地进行数据存储读取操作?
感谢进阶。