更快的App Engine开发:Datastore替代方案

9

是否有一种方法可以使用真实的数据库(SQLite、Mysql或者其他非关系型数据库)作为开发数据存储,而不是提供的内存/文件数据存储。

我看到了一些项目,比如GAE-SQLite(似乎无法正常工作),还有一个提示可以通过远程API访问生产数据存储(对于大型数据集仍然非常慢)。


1
为什么?你将会得到什么优势? - Adam Crossland
3
开发更加轻松,SDK附带的开发数据存储在试验时即使有超过几百个实体,也太慢了。 - M. Utku ALTINKAYA
1
除了我下面的回答之外,我没有遇到你提到的大量实体导致的显著减速问题。 - Koen Bok
2
我的开发服务器有大约40k个实体,消耗了大约2GB的内存,导致整台电脑停顿。我们有没有办法在开发服务器上使用真正的在线数据存储? - speedplane
有几千个实体,每个实体只有一个属性,在我的开发服务器上调用“Entity.query”需要很长时间,以至于我只能离开它,做其他事情一段时间。我已经开始在每个测试中运行清理操作,以防止任何东西累积,所以现在每个测试都需要很长时间 :( - Carl Smith
3个回答

4
MongoDB非常适合这个任务。您需要:

代码:

import datastore_mongo_stub

os.environ['APPLICATION_ID'] = 'test'

datastore = datastore_mongo_stub.DatastoreMongoStub(
    os.environ['APPLICATION_ID'], 'woot', '', require_indexes=False)

apiproxy_stub_map.apiproxy.RegisterStub('datastore_v3', datastore)

但如果你真的想要更快的开发(就像我一样),数据存储其实并不是最大的问题,而是单线程的 Web 服务器。我尝试用派生来替换它,但那有点太难了。你也可以尝试设置 TyphoonAE,它将使用开放式替代品模拟 appengine 堆栈。
请注意,如果你进行任何这些操作,可能会失去当前工具提供的某些精确行为,这意味着如果你部署,可能会得到意外的结果。换句话说,请确保你知道自己在做什么 :-)

Koen,谢谢,这是我所寻找的最接近的东西。不幸的是,管理控制台是无用的,因为模式内省没有实现。我正在寻找一个GUI工具,至少可以用来查看数据。 - M. Utku ALTINKAYA
好的,还有一些指针。有一个人开始了一个SQLite存根:http://blog.appenginefan.com/search/label/SQLite。我不确定他是否完成了它,但也许你可以让它工作。应该有足够的GUI浏览器适用于SQLLite。但请记住,数据模型不是非常可浏览,因为它模仿了一个键值存储。再说一遍,我已经做了很多appengine开发,从来没有真正需要数据浏览器,但也许这是一种风格。祝你好运 :-) - Koen Bok
哦,而且考虑一下,数据浏览器应该实际上可以与任何存根一起使用,因为它使用正常的数据存储API。因此,如果它不能直接使用,则修复应该不难。 - Koen Bok

2

Google App Engine SDK for Python现在支持SQLite。有关更多信息,请参见官方文档


1

bdbdatastore 是一种备选的数据存储后端,比开发服务器内置的那个要好得多,尽管当涉及到处理大型应用程序时,数据存储后端远非开发服务器的唯一问题。


不幸的是,它相当过时了。我尝试将补丁应用于SDK 1.3,但这个补丁太大了,如果不了解所有底层代码,就很难修复。 - M. Utku ALTINKAYA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接