使用Google App Engine的iPhone应用程序
我做了一个iPhone应用的原型,它内部使用SQLite作为数据库。我的计划是最终让它通过PHP与服务器通信,而服务器会使用MySQL作为后端数据库。
不过,我最近发现了Google App Engine,但对它了解得不多。我觉得用Python接口来写数据存储会很不错,但我对GQL的功能了解得也不多。我基本上已经用MySQL写好了所有的数据库代码,并在iPhone上用SQLite进行了内部测试。GQL能提供和SQL一样的功能吗?我在网站上看到它不支持连接查询(join queries)。那它真的算是关系型数据库吗?
简单来说,我想问的是,通常使用SQL后端的应用能否在Google的App Engine上用GQL一样顺利运行?
希望我说得清楚……任何指导都很棒。
4 个回答
这个问题挺常见的 :)
简单来说:可以。虽然你需要重新考虑一下你的数据结构,但基本上,你可以用GAE的Datastore API来支持这个功能。
当你创建Python模型的时候(可以把它想象成数据库里的表),你当然可以定义指向其他模型的引用(这就相当于外键)。当你选择这个模型时,你会得到相关的模型数据(就像数据库里的连接操作)。
这大概率是可行的,但它并不能完全替代mySQL服务器。
GQL几乎没有什么功能,它只是用来写SELECT查询的,主要是为了让SQL程序员写查询变得更简单。实际上,它会把你的查询转换成db.Query对象。
App Engine的数据存储根本就不是关系型数据库。虽然你可以做一些看起来像关系型的操作,但我建议那些有SQL背景的人尽量不要使用GQL,以免误以为这个数据存储和关系型数据库有什么相似之处,最好把你对数据库设计的知识都抛掉。特别是,如果你在做任何规范化的工作,过一段时间你会后悔的。
没错,Google App Engine(GAE)是个很酷的产品,但它的数据库存储方式和普通的mySQL数据库有很大不同。并不是说你想要的功能在GAE的数据库里做不到,只是可能需要你做一些调整。
你一开始就能注意到的最大区别是,GAE使用了一种叫做对象关系映射(ORM)的方式来存储数据。简单来说,就是把对象图保存在数据库里,同时保持它们的属性和与其他对象的关系。在很多情况下,ORM可以很好地映射到关系型数据库上(这就是Hibernate的工作原理)。不过,这种映射并不是完美的,你会发现需要对数据进行一些修改才能保存。此外,GAE还有一些独特的限制,这让事情变得有点复杂。让我最烦恼的一个限制是,不能通过属性路径来查询,比如“选择... 当狗的主人名字是'bob'时”。正是这些规则让你在开始之前必须先了解GAE的数据库是怎么运作的。
我觉得GAE在你的情况下是可以用得上的。只是可能需要一些时间来理解ORM的持久化以及GAE数据库的具体情况。