Database 如果没有Google App Engine上的连接,您的数据是否必须存在于一个大表中?

Database 如果没有Google App Engine上的连接,您的数据是否必须存在于一个大表中?,database,database-design,google-app-engine,join,datatable,Database,Database Design,Google App Engine,Join,Datatable,由于Google App Engine不允许联接,这是否意味着我必须获取web App中的所有表,并找出一种方法将它们合并到一个大表中?将其合并到一个大表中始终是一种选择,但大多数情况下会导致不必要的大表和冗余表,因此,它会使你的应用程序运行缓慢,难以维护 您还可以通过迭代查询结果,并为第一个查询找到的每个结果运行第二个查询来模拟联接。如果您有SQL查询 SELECT a.x FROM b INNER JOIN a ON a.y=b.y; 您可以通过以下方式来模拟: for b in db.G

由于Google App Engine不允许联接,这是否意味着我必须获取web App中的所有表,并找出一种方法将它们合并到一个大表中?

将其合并到一个大表中始终是一种选择,但大多数情况下会导致不必要的大表和冗余表,因此,它会使你的应用程序运行缓慢,难以维护

您还可以通过迭代查询结果,并为第一个查询找到的每个结果运行第二个查询来模拟联接。如果您有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

从关系数据库切换到App Engine数据存储需要开发人员在建模数据时进行范式转换。看一看,得到一个更好的想法。这将要求您提前考虑如何将问题适应数据存储施加的约束,但如果可以,则可以保证它将快速运行并可扩展

仅仅因为DBMS没有实现连接并不意味着不能有多个表。在AppEngine中,这些被称为“实体类型”,您可以拥有任意数量的实体类型


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

如果您正在寻找设计数据表的方法。我建议你在开始工作之前做一点调查。谷歌应用程序引擎有很多神奇的特性,比如:

  • 自合并
  • 多值列表属性
这对你的设计很有帮助。我已经分享了


要了解缩放能力,有一个专门的主题。它是由reddit.com的创始人教授的,他清楚地解释了reddit中发生的所有缩放事件,reddit是访问人数最多的网站之一。他用gae展示了整个课程演示的实现过程(这对我来说是个好机会!)。他们提供整个课程的视频。在获得这些资源之前,我一直在努力使用AppEngine。所以我想分享这一点可能会帮助其他正在涉足水中的人

appengine使用GQL,它有一个非常基本的SQL语法子集。我不是100%确定,但我相信您的SQL示例不会起作用。是的,GQL不如SQL强大,但功能足够强大,所以我的示例会起作用。看到了吗?这不会导致大量连接到数据存储,从而降低速度吗?不一定是大量连接到数据存储,因为一个连接可以发送数个(数千个)请求。还请注意,数据存储在物理上靠近应用程序服务器,因此通信相对较快。我认为做一些基准测试是有用的,然后看看它对于特定用例是否足够快。