由于 Google App Engine 不允许连接,这是否意味着我必须获取网络应用程序中的所有表并找出将它们组合成一个大表的方法?

有帮助吗?

解决方案

仅仅因为您没有DBMS实现的连接并不意味着您不能拥有多个表。在App Engine中,这些被称为“实体类型”,您可以根据需要使用它们。

通常,您需要对数据进行非规范化,以避免频繁连接。在少数几种不可避免的情况下,您可以使用其他技术,例如加入用户代码。

其他提示

将它与一个大表结合起来总是一个选项,但它会在大多数情况下产生不必要的大型和冗余表,因此它会使您的应用变得缓慢且难以维护。

您还可以通过迭代查询结果并针对第一个查询找到的每个结果运行第二个查询来模拟连接。如果您有SQL查询

SELECT a.x FROM b INNER JOIN a ON a.y=b.y;

你可以用这样的东西来模仿:

for b in db.GqlQuery("SELECT * FROM b"):
  for a in db.GqlQuery("SELECT * FROM a WHERE y=:1", b.y):
    print a.x

如果您正在寻找设计数据表的方法。我建议您在开始工作之前做一些研究。Google App Engine 有一些非常神奇的属性,例如:

  • 自合并
  • 多值列表属性

这对你的设计非常有帮助。我分享过 我在这里的经历.

要了解可扩展性,有一个独家的 Udacity 的免费课程在这里 就主题而言。它是由 reddit.com 的创始人讲授的,他清楚地解释了 reddit(访问者数量最多的网站之一)中发生的整个扩展过程。他在 gae 中展示了整个课程演示的实现(这对我来说是一个大奖!)。他们提供整个课程视频 在这里免费下载 。在获得这些资源之前,我一直在努力使用应用程序引擎。所以我想分享这个可能会帮助其他正在涉足水域的人。

从关系数据库切换到App Engine数据存储区时,开发人员在建模数据时需要进行范例转换。请查看此处以获得更好的主意。这将要求您更多地预先考虑如何使您的问题适应数据存储所施加的约束,但如果可以,那么您可以保证它将快速运行并扩展。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top