4

首先,我来自 RDBMS/SQL/C++/Java/Python 背景,我是
Gaelyk、Google API 和 Google 数据存储的新手。

我喜欢在编码之前进行建模(对代码使用流程图,对数据库使用 DB 建模工具)

我过去大量使用 Erwin 来进行数据库建模。

在 Erwin 中,我设计了一个数据库的逻辑/物理数据模型,我想
使用 Google 数据存储和 Gaelyk 和 Google AppEngine SDK 来实现。

我想在编码之前设计数据布局。
我选择的设计工具是 Erwin Data Modeler。

当我查看 Google 数据存储时,我发现
没有关系约束,并且连接是通过
WHERE 子句 :bind 变量完成的。

如何将现有模型(带有 PK/FK、依赖实体、重关系链接)映射到 Google 数据存储区?

是否有可以让我为 Google 数据存储进行设计的建模工具?
数据库设计是否应该源自 Gaelyk MVC 模式和直接编码?
我不习惯这一点,因为我来自 RDBMS 背景,在那里你大量建模
,​​所有好的东西都来自良好的关系设计。

此外,在使用命令式语言(C++、C、Java、Python)编写数据库客户端应用程序之前,
我喜欢编写伪代码,但首先是数据库设计(如果应用程序
有数据库后端)

我做这一切都错了吗?看起来有一套工具可供我
开始编码,但没有设计工具集。

附录:
这是我试图映射的逻辑模型模型

我将如何映射循环关系
帐户 --(1:m)-- following --(m:1)-- following_account_id --(1:1)-- account_id?

4

1 回答 1

9

一般来说,App Engine 数据存储区以及所有非关系型数据库的指导原则是“针对读取进行优化”。简而言之,这意味着去规范化,去规范化,去规范化。在某些情况下,这会使更新变得更加困难 - 例如,如果您将用户名作为帐户表的主键,并且用户想要更改用户名 - 在某些情况下需要复制数据,例如存储持久计数。不过,所有这些都是值得的,因为它提供了更好的读取性能和可扩展性,并且在典型的 web 应用程序中,读取次数比写入次数高出数百比一。

特别是查看您的模型,它非常规范化 - 甚至比我见过的大多数 RDBMS 模型还要规范化。一些建议:

  • 将诸如“user_name_id”之类的内容汇总到您的主帐户表中。
  • 对于“关注”之类的事情,如果关注的人数通常很少(<1000),则使用列表属性,否则使用扇出模式
  • 在可行的情况下为每个表选择一个合理的主键,例如用户名或电子邮件,并将其用作键名。这允许使用 get 操作而不是查询来查找记录,这大大加快了速度。
  • 当需要诸如“帐户类型”之类的查找表时,请确保外键具有足够的描述性,您只需查找相应的管理操作记录即可。更好的是,在数据存储之外存储像这样不经常更改的小细节,以便可以立即访问它们。
  • 对于标签之类的东西,使用列表属性来减少查找相关实体的次数,并使索引更容易。

当然,这只是皮毛,这里有很多关于 SO、小组和像我这样的博客的智慧。随时回来询问有关数据建模的具体问题!

要回答您的其他问题,不,我知道没有特定于 GAE 的数据建模工具,但您可以使用现有的标准图表工具。模型确实是在代码中定义的,因为数据存储是无模式的,但这不一定是您实现事物顺序的障碍。

于 2011-08-10T00:04:43.803 回答