【发布时间】:2018-03-29 12:24:05
【问题描述】:
我想在我的应用中记录用户活动,以便向用户展示和管理。我的客户是公司,因此我可能会在三个级别上展示活动:
- 单个用户的活动
- 公司所有用户的活动
- 所有活动
要进行日志记录,我将创建一个模型来存储日志条目。我看到了几种方法。
首先,我可以将每个记录的活动存储在其自己的实体中,然后根据需要进行查询:
class Activity(ndb.Model):
activity = ndb.StringProperty()
user_id = ndb.StringProperty()
company_id = ndb.StringProperty()
其次,我可以将用户的所有活动存储在一个实体中:
class UserActivity(ndb.Model):
activity = ndb.StringProperty(repeated=True) # Note this is now a list
company_id = ndb.StringProperty()
第三,我可以将公司的所有活动存储在一个实体中:
class CompanyActivity(ndb.Model):
activity = ndb.StringProperty(repeated=True) # Would store user_id here somehow
这三个选项的功能/性能权衡是什么?我知道如果有频繁的看跌交易,第二个和第三个选项可能存在争用问题,但为了讨论,我们假设这不是一个问题。
对于第二个和第三个选项,减少数据存储实体的总数(因为它们将被合并到更少的实体中)是否有任何显着优势?还是我应该选择第一个选项?
【问题讨论】: