私はこれらの2つのデータストアを持っています:
class User(db.Model):
name = db.StringProperty(required = True)
password = db.StringProperty(required = True)
email = db.EmailProperty(required = True)
created = db.DateTimeProperty(auto_now_add = True)
image = db.LinkProperty(required = True)
class Post(db.Model):
post = db.StringProperty(required = True, multiline = True)
submitter = db.IntegerProperty(required = True)
receiver = db.IntegerProperty(required = True)
created = db.DateTimeProperty(auto_now_add = True)
ただし、問題は、ユーザーが受け取ったすべての投稿を表示するユーザーページを生成することですが、これは非常にSQLで単純な方法で次のように実行しています。
ret = []
#Get all Posts
for p in self.getPosts():
#If the receiver of the post is equal to uId
if str(p.receiver) == str(uId):
#Get submitter Details
sDetails = self.getUserDetails(p.submitter)
#Check that details were received
if sDetails:
#Add needed Details to post
p.sName = sDetails.name
p.sId = str(sDetails.key().id())
p.sImage = sDetails.image
ret.append(p)
return ret
どうやってこれを改善しますか?このアプローチで私が最も嫌っているのは、各投稿を通過する必要があることです。これにより、システムが大きくなると、システムが非常に遅くなります。
また、すべての投稿はmemcacheに保存されるため、GQLを使用してこれを改善することはできません。私のアプローチではなく、memcacheにデータを保存するためのより良いアイデアがない限り...つまり、頻繁に使用されるすべてのクエリをそこにチャックし、データストアに新しいアイテムが追加されたらキャッシュを更新します。
少し私の質問をフォローしている人にとって、このプロジェクトはソーシャルメディアの新しいコンセプトであり、完了したらリンクを投稿します:)