在处理了几个GAE应用程序(其中一些正在用于生产)后,我得出的结论是,在此平台上,备份生产数据的速度足够慢且足够昂贵,以便我们可以转换到其他基于云的应用程序技术堆栈。
在我们的一个生产应用程序中,我们有大约一百万个实体,每个实体的平均大小为1KB。所以数据的总大小约为GB,这应该不是什么大问题,对吧?以下是使用默认选项从应用引擎获取实体后的bulkloader工具的输出:
[INFO] 948212实体(608342497字节)在47722.7中传输 秒
差不多13个小时。因此,如果我们想为我们的生产数据建立一个每小时备份系统,那么使用当前的GAE工具集将无法实现这一点。
成本是另一回事。我尝试使用数据存储管理员将实体复制到我认为可用于备份的其他应用程序。我首先将预算设置为每天2美元,快速耗尽大约5000个实体,然后我将预算增加到每天10美元,再次耗尽而不会复制百万实体。
我显然不打算每次需要支持100美元我需要支持1 GB数据时,我也不想等待数小时(甚至数天),以便我的数据可以备份。所以要么我不知道某些东西,要么Google App Engine目前只是一种不切实际的方式来编写可以轻松备份和恢复的可扩展的生产质量应用程序。
从GAE应用程序备份数据是否有快速且经济高效的方法?
答案 0 :(得分:5)
打赌你已经找到了Yasser的解决方案,但是对于谷歌最终的其他人来说,这是一个更新的答案:
appstore admin中的备份选项已升级为支持数据存储和云存储。它还使用mapreduce进行备份,这使得查询在系统上更轻松。
答案 1 :(得分:2)
根据GAE billing doc,您应该支付以下费用:
数据存储:
1 query = 2 read operations
1 Mio entity queries = 2 Mio read operations
100k read operations = $0.07
Cost: 1M entities queried = $0.14
Bandwith:
Price: $0.12 / Gb
Cost: 1Gb data with 50% overhead (network + metadata) = 1.5Gb x $0.12 = $0.18
后端实例:
Price: $0.08/h smallest instance
Cost: 1h = $0.08
总费用:$0.40
看起来bulkloader的效率非常低。您可能会重新考虑编写自己的备份代码。如果您只有一种没有关系的实体,这应该很容易。
答案 2 :(得分:2)
我认为您的大部分费用是将数据写入另一个应用而不是从您的应用中读取数据。根据您的数据模型,将实体写入数据存储区的成本可能很容易达到首先读取它的成本的100倍。
由于备份很少得到恢复,我建议您将备份存储在Blobstore中。将要备份的实体选择为字节流,将流分成每个1 MB的块,然后write them all into the blobstore。
将数据写入blobstore仍然会花费数据存储区写入,但基于this StackOverflow answer,每个存储blobstore实体只会收取12个写操作。假设每个pickle实体的大小约为2KB,并且每个实体每次存储到数据存储区需要100个写操作,这意味着写入成本节省了大约99.97%。
答案 3 :(得分:1)
这是一个非常好的问题。我一直在寻找这个问题,我认为谷歌云存储(实验性)将更适合备份数据,原因如下,我从谷歌网站上获取这些信息以帮助您获取一些信息。
Google App Engine提供了一种更轻松的方式来读取和写入Google云端存储对象,从而允许应用程序创建和提供数据对象。这些对象存储在云存储中的存储桶中,但Google App Engine应用程序可通过Google云端存储API进行额外访问。您可以使用RESTful界面或Google云端存储Python API for Google App Engine应用程序与Google云端存储API进行互动,本文档对此进行了讨论。
关于定价:
免费配额:5GB存储空间(这非常适合您的情况)
付费配额:首先0 - 1TB $ 0.085 / GB /月