当前位置:  开发笔记 > 编程语言 > 正文

你怎么不加入?

如何解决《你怎么不加入?》经验,为你挑选了2个好方法。

我最近一直在阅读有关数据库查询中的连接如何减慢速度的问题.显然,Google App Engine甚至不允许使用它们.

我想知道人们如何设计一个没有连接的应用程序.例如,我正在开发一个拥有contacts和的应用程序organizations.联系人可以在许多组织中,组织可以有许多联系人.如果没有连接两个实体的第三个表,那怎么可能有这种关系......

contacts --< contacts_organizations >-- organizations

这是否意味着在GAE中你不能拥有多对多的关系?您只是遗漏了需要加入的功能?

我想你可以organizationscontacts表格中有一个TEXT 列,其中包含每个联系人的组织ID的空格分隔列表.这看起来有点奇怪.



1> Bill Karwin..:

加入速度慢的软件是一种神话,就像在应用程序代码中断言写入循环减慢软件一样神话般的神话.

我的意思是,为什么要写一个循环?这只是一次又一次地运行相同的代码行!还不够吗?这是一个巨大的浪费!

上述陈述具有讽刺意味.

我的观点是,查询包含一个用于目的的连接:获得正确的答案.低效或不必要地使用连接当然是糟糕的设计,比如将循环不变代码放在循环中.

避免连接作为一般策略是过早优化的一个例子.如果您编写高效代码的方法是提出类似的一揽子规则,那么避免连接并不会对您有所帮助.


至于Google App Engine,它确实支持实体之间的关系,但由于它不是严格意义上的关系数据库模型,因此连接的概念并未真正出现.相反,您可以从给定引用获取相关实体,这更像是模型的ORM接口,它与SQL中的连接不同.

您可以在此处阅读更多内容:http: //code.google.com/appengine/articles/modeling.html

(该链接在此主题的另一个答案中,但已被删除)



2> James Brady..:

挑选点:Google不会在其数据库中禁止使用JOIN来阻止用户运行"昂贵"的查询; 数据库不是关系型的,因此"JOIN"SQL动词首先不适用.

通过这种方式,BigTable与Amazon的SimpleDB相同- 数据被非规范化并剥离了模式,因此您可以有效地使用存储桶中允许的任意数据的巨大,高效的哈希表.

这些哈希表非常容易扩展,特别是与关系数据库相比.对于像GAE这样的应用,极端可扩展性比完整功能集更高.

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有