事件和共享资源的GAE数据模型

时间:2012-03-10 22:07:57

标签: python google-app-engine google-cloud-datastore scalability

我无法提供良好的数据模型和查询,这些模型和查询可以很好地扩展,以便像Google日历的事件和资源那样建模数据。

资源在用户之间共享,资源一次只能在一个事件中。资源将具有多个事件,但这些事件不能重叠或同时发生。事件也可以有多个资源。

class event(db.Model):
  #user that created/owns the event
  user = db.ReferenceProperty(user, collection_name='events',required=True)

  #an event can have multiple resources
  resources = db.StringListProperty() # resource key(s)

  #when the event opens and closes (start/stop)
  opendt = db.DateTimeProperty()
  closedt = db.DateTimeProperty()

class resource(db.Model):
  name = db.StringProperty(required=True)

使用这些数据模型,我无法在创建活动时提供快速,可扩展的方式来获取可用资源列表。

  1. 获取所有资源(简单查询)
  2. 获取与新事件重叠的所有事件(多个查询)
    1. 查找在新活动之前和之后开始的事件
    2. 查找在新活动之前和之后开始的活动
    3. 查找在新活动期间开始和结束的事件
    4. 查找在新活动期间和结束后开始的活动
  3. 过滤掉重叠事件中包含的资源
  4. 我觉得随着更多事件和资源的添加,这个过程会越来越慢。我也不知道如何能够对资源的最终结果进行分页。

    当用户创建新事件时,在他们输入新事件的开始/停止日期时间后,我希望他们能够快速查看该时间段的可用资源。

    有更好,更有效的方法吗?

1 个答案:

答案 0 :(得分:0)

在我的头顶,这将工作: 1.使用长整数来表示你的时间块,有点像Unix计时器,但是使用大块时间,所以说每个增量代表15分钟。即0 = 1/1/2012 00:00,1 = 1/1/2012 00:15,2 = 1/1/2012 00:30等

在你的资源和事件中,存储一个长整数的ListProperty,用于它们被占用的所有时间量。

如果要查看资源或事件在某个特定时间点是否处于“活动状态”,只需计算该时间块的长整数值,然后使用“in”过滤器在ListProperty中搜索它。查询。