我有一個StatisticStore
模型定義爲:聚合來自NDB數據存儲的數據的最佳方式是什麼?
class StatisticStore(ndb.Model):
user = ndb.KeyProperty(kind=User)
created = ndb.DateTimeProperty(auto_now_add=True)
kind = ndb.StringProperty()
properties = ndb.PickleProperty()
@classmethod
def top_links(cls, user, start_date, end_date):
'''
returns the user's top links for the given date range
e.g.
{'http://stackoverflow.com': 30,
'http://google.com': 10,
'http://yahoo.com': 15}
'''
stats = cls.query(
cls.user == user.key,
cls.created >= start_date,
cls.created <= end_date,
cls.kind == 'link_visited'
)
links_dict = {}
# generate links_dict from stats
# keys are from the 'properties' property
return links_dict
我想有一個AggregateStatisticStore
模型存儲的StatisticStore
每天聚集。它可以每天產生一次。喜歡的東西:
class AggregateStatisticStore(ndb.Model):
user = ndb.KeyProperty(kind=User)
date = ndb.DateProperty()
kinds_count = ndb.PickleProperty()
top_links = ndb.PickleProperty()
因此,以下將是真實的:
start = datetime.datetime(2013, 8, 22, 0, 0, 0)
end = datetime.datetime(2013, 8, 22, 23, 59, 59)
aug22stats = StatisticStore.query(
StatisticStore.user == user,
StatisticStore.kind == 'link_visited',
StatisticStore.created >= start,
StatisticStore.created <= end
).count()
aug22toplinks = StatisticStore.top_links(user, start, end)
aggregated_aug22stats = AggregateStatisticStore.query(
AggregateStatisticStore.user == user,
AggregateStatisticStore.date == start.date()
)
aug22stats == aggregated_aug22stats.kinds_count['link_visited']
aug22toplinks == aggregated_aug22stats.top_links
我想只是運行與任務隊列API一個cronjob的。該任務將生成每天的AggregateStatisticStore
。但我擔心它可能會遇到內存問題?看起來像StatisticStore
可能有很多記錄每個用戶。
另外,top_links
屬性類複雜化了一下。我不確定如果在聚合模型中擁有它的屬性是最好的方法。任何關於該財產的建議都會很好。
最終我只想記錄StatisticStore
直到大約30天前。如果記錄超過30天,則應該將其彙總(然後刪除)。節省空間並改善可視化的查詢時間。
編輯:每次記錄StatisticStore
時,它會創建/更新適當的AggregateStatisticStore
記錄。這樣,所有的cronjob所要做的就是清理。思考?
你看過mapreduce api嗎?但是,更新StatistcStore時更新AgregateStatisticStore可能是更好的主意。儘管您可能想要分割AgregateStatisticStore,但這可能取決於您的性能需求。如果StatisticStore未針對給定用戶頻繁更新,則可能不需要對其進行分片。 – dragonx
是的,我已經看過mapreduce,但是我很難對它進行維護。 「分片」AggregateStatisticStore是什麼意思? – john2x
@ john2x我以爲你不能在查詢中過濾多個屬性?您的查詢是否有效? – Erevald