0

让我们直接进入正题,

在这里考虑我的客户应用程序名称 -具有相同应用程序代码的ABCXYZ 。

现在让我们考虑一种 db 类型,

class user_details(db.Model):
   user_id = db.IntegerProperty()
   username = db.StringProperty()
   emailid = db.StringProperty()
   usertype = db.StringProperty()  #Require/used only in **ABC** app
   accesslevel = db.StringProperty() #Require/used only in **XYZ** app
   .
   .

然后我意识到,虽然应用程序为ABCXYZusertype提供相同的模型结构,但对于XYZABCaccesslevel,很少有属性意义不大或类似

那就是这种方式或技巧,以便我只能提供应用程序实际需要的这些属性。喜欢忽略XYZ或喜欢忽略ABCusertype。这样我就可以节省我的数据库空间。accesslevel

注意:我通过db.Expandogae doc 中的方法。但我不想在现有应用程序中使用该数据库类型。我宁愿db.Model只。因为这些应用程序已经在这里运行了。& 每个客户端数据库有大约 20 亿条记录。

如果有人会实施这些方案,请建议我合适的解决方案。

我会很感激你对此的回应。

真挚地。

尼克斯

4

1 回答 1

2

我将为公共子集创建一个基类,然后为每个客户端添加子类。您还应该考虑使用命名空间来分隔每个客户端的数据。您必须知道您正在使用哪个客户端(因此命名空间),然后加载适当的模型。

另一种可能性是使用 PolyModel,但所有子类都是所有属性的集合。

from google.appengine.ext import db

class UserBase(db.Model):
    user_id = db.IntegerProperty()
    username = db.StringProperty()
    emailid = db.StringProperty()

class UserABCDetails(UserBase):
    usertype = db.StringProperty() 

class UserXYZDetails(UserBase):
    accesslevel = db.StringProperty()

如果您想使用 PolyModel,您只需将 db.Model 替换为 db.PolyModel,但您应该阅读其后果。

于 2013-04-24T09:29:21.360 回答