创建应用程序时的设计选择

时间:2014-09-08 18:58:28

标签: google-app-engine google-cloud-datastore app-engine-ndb

我正在尝试使用谷歌应用引擎和python ndb构建一个提醒应用。现在我有两个实体User和Reminder。什么是更好的设计:

  1. 将提醒作为单独的实体进行操作,并提供用户设置的提醒列表以及用户实体中用户的提醒。使用唯一ID标记新提醒,并在User实体中正确添加其ID。
  2. OR

    1. 将提醒作为User类的属性。直接向用户添加新提醒。在这种情况下,在设置它的用户和其他设置的用户中将有两个提醒副本,为其设置。
    2. 如果我选择第一个,那么每个提醒就会增加一个整数id,考虑到它可能会非常高吗?或者还有其他更好的方法来做到这一点。

1 个答案:

答案 0 :(得分:0)

Google App Engine(GAE)NDB模型密钥ID号码不会自动递增,因此我不确定这是一个相关问题。

GAE NDB模型使用密钥,可以将密钥存储为其他模型实例中的密钥属性列表。密钥存储id,可用于稍后检索提醒。

#  Create an instance of a model
instance = SomeModel()
instance.put()

# Retrieve ID
instance.key.id()

例如,您可以使用提醒和用户模型,但将提醒密钥作为用户的属性:

from google.appengine.ext import ndb 

class Reminder(ndb.Model):
    remindTime = ndb.DateTimeProperty()

class User(ndb.Model):
    reminderKeys = ndb.KeyProperty(kind=Reminder, repeated=True)

向用户添加新提醒时,您将执行以下操作:

from datetime import datetime, timedelta

# Set reminder times to future
reminder1 = Reminder(remindTime = datetime.now() + timedelta(minutes = 10))
reminder2 = Reminder(remindTime = datetime.now() + timedelta(minutes = 20))

# Send reminders to datastore to assure they have generated keys
reminder1.put()
reminder2.put()

# Create user with reminder1
user = User(reminderKeys = [reminder1.key])

# Add reminder2 to user
user.reminderKeys.append(reminder2.key)

# Retrieve Reminders for user
for key in user.reminderKeys:
    print Reminder.get_by_id(key.id())

这样,您可以为提醒创建其他属性,同时仍将它们绑定到用户模型。

您可以在此处详细了解GAE NDB属性和键的行为: https://developers.google.com/appengine/docs/python/ndb/properties