首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AppEngine数据库布局,易于扩展

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

Stack Overflow用户
提问于 2012-03-17 01:29:16
回答 1查看 69关注 0票数 0

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

代码语言:javascript
运行
复制
station {
    unique_identifier: id
    ...
}

大多数属性如下所示

代码语言:javascript
运行
复制
station_attribute_item {
    referenced_station: id,
    value: double,
    date: date
}

因此,您可以将属性可视化为具有日期成员和值的列表中的一项。

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

代码语言:javascript
运行
复制
new_station_attribute {
    referenced_station: id
    value1: string
    value2: double
    start: date
    end: date
}

编辑:

这种数据布局在AppEngine基础架构上可行吗?

EN

回答 1

Stack Overflow用户

发布于 2012-03-18 05:15:46

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

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

  1. 您将无法在多个属性上查询实体。如果你想以原子方式更改一个实体或它的属性(添加/删除实体,添加/删除/更改属性),你必须将它们全部放入一个实体组中,并使用transactions.
  2. You。
  3. 将需要使用查询来查找实体的属性,这是非常昂贵的。
  4. 删除实体时,需要手动查找所有属性实体并将其删除。

所以,总而言之,我不能推荐这种方法。

解决方案:

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

在python中,您可以通过Expando class实现这一点。

在Java中,您可以使用low-level Entity class

Objectify曾经具有嵌入式映射,您可以在其中向该映射添加属性,这些属性最终将作为实体中的属性。他们在Objectify 3.1的实现中发现了一个错误,并收回了这个特性(=从文档中消失)。这个功能will be back in Objectify 4还没有发布,但是如果你觉得勇敢,你可以从主干构建它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9741850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档