关系数据模型到Google数据存储区映射

3 google-app-engine transactions gaelyk google-cloud-datastore

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

在编写代码之前,我喜欢建模(使用数据库的代码和数据库建模工具的流程图)
.
过去我曾经大量使用过Erwin进行数据库建模.

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

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

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

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

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

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

我做错了吗?看起来我
可以使用一套工具来开始编码,但设计工具集并不存在.

附录:
这是我试图绘制的逻辑模型模型

我如何映射一个循环关系
帐户 - (1:m) - 跟随 - (m:1) - following_account_id - (1:1) - account_id?

Nic*_*son 9

通常,App Engine数据存储的指导原则 - 以及所有非关系数据库 - 都是"针对读取进行优化".简而言之,这意味着非规范化,非规范化,非规范化.在某些情况下,这将使更新变得更难 - 例如,如果您将用户名设置为帐户表的主键,并且用户想要更改用户名 - 并且在某些情况下需要复制数据,例如存储持久计数.但是,所有这些都是值得的,因为它提供了更好的读取性能和可伸缩性,并且在典型的Web应用程序中,读取的数量超过了数百比一的因子.

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

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

当然,这只是表面上的划痕,而且在SO,群组以及像我这样的博客上都有很多收集到的智慧.请随时回来询问有关数据建模的具体问题!

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