【问题标题】:Relational data model to Google datastore mapping关系数据模型到 Google 数据存储的映射
【发布时间】:2011-10-22 19:25:36
【问题描述】:

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

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

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

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

当我查看 Google 数据存储时,我发现那里
没有关系约束,连接是通过
WHERE 子句:绑定变量。

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

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

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

我做错了吗?好像有一套工具可供我使用
开始编码,但没有设计工具集。

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

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

【问题讨论】:

  • 您的问题太模糊,无法明智地回答。向我们展示您的模型,并向我们询问有关如何在 App Engine 中对其建模的具体问题。此外,“连接是通过 WHERE 子句:绑定变量完成的”——这不是真的,您不能在 App Engine 中进行连接。绑定参数仅用于 - 查询参数。
  • @Nick Johnson 我已根据您的请求添加了 Erwin 逻辑数据模型。我将如何映射循环关系帐户 --(1:m)-- following --(m:1)-- following_account_id --(1:1)-- account_id?

标签: google-app-engine transactions google-cloud-datastore gaelyk


【解决方案1】:

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

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

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

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

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

【讨论】:

猜你喜欢
  • 2013-11-07
  • 1970-01-01
  • 1970-01-01
  • 2014-04-25
  • 2012-02-25
  • 2011-11-05
  • 1970-01-01
  • 2015-11-12
  • 2011-07-15
相关资源
最近更新 更多