Database AppEngine数据库布局,易于扩展

Database AppEngine数据库布局,易于扩展,database,google-app-engine,database-design,Database,Google App Engine,Database Design,我需要一个数据库布局,这是高度可扩展的。我有一个超级类“站”,它将有一个唯一的id和多个属性 station { unique_identifier: id ... } 大多数属性如下所示 station_attribute_item { referenced_station: id, value: double, date: date } 因此,您可以将属性可视化为包含日期成员和值的列表项 因此,如果我需要一个新属性,我就添加一个新类,就这样?我所要

我需要一个数据库布局,这是高度可扩展的。我有一个超级类“站”,它将有一个唯一的id和多个属性

station {
    unique_identifier: id
    ...
}
大多数属性如下所示

station_attribute_item {
    referenced_station: id,
    value: double,
    date: date
}
因此,您可以将属性可视化为包含日期成员和值的列表项

因此,如果我需要一个新属性,我就添加一个新类,就这样?我所要做的就是查询一个新属性

new_station_attribute {
    referenced_station: id
    value1: string
    value2: double
    start: date
    end: date
}
编辑:


此数据布局在AppEngine基础设施上可行吗?

您所做的是将属性表示为一个单独的实体。因此,您将得到几个表示引用父实体的属性(=属性)的不同实体

这是不可行的,原因如下:

  • 您将无法在多个属性上查询实体

  • 如果您想以原子方式更改实体或其属性(添加/删除实体、添加/删除/更改属性),则必须将它们全部放在实体组中并使用事务

  • 您将需要使用查询来查找实体的属性,这是非常昂贵的

  • 删除实体时,需要手动查找所有属性实体并将其删除

  • 因此,总而言之,我不能推荐这种方法

    解决方案:

    GAE数据存储是一个无模式数据库,这意味着您可以存储具有不同属性的同类实体,例如具有动态属性的实体。问题在于如何将动态属性映射到类

    在python中,您可以通过

    在Java中,可以使用。低级API是最强大的,因为它公开了所有数据存储特性,但在使用“无类型”实体类而不是模型类时,使用起来很麻烦


    用于具有嵌入式映射,在其中向该映射添加属性,它们最终作为实体中的属性。他们在Objectify 3.1的实现中发现了一个错误,并撤销了该功能(=从文档中消失)。此功能尚未发布,但如果您有勇气,您可以从主干上构建它。

    您是否在询问此布局在App Engine上是否可行?它是。它是否适合您的应用程序的布局取决于您打算如何使用这些数据。您是对的,这个问题在某种程度上还不够精确。