我目前正在寻找备份Google App Engine的webapp数据存储区的最佳方法。从我一直在做的阅读看来,我可以通过两种不同的方式来做到这一点。我可以通过调用appcfg.py来使用GAE的bulkloader upload_data --application = --kind = --filename =或者我可以进入我的webapp的数据存储管理部分,选择我要备份的实体,然后单击“备份”实体“按钮。除非我弄错了,“备份实体”按钮将在blobstore中创建我的数据存储的备份,而使用appcfg.py的download_data将创建本地备份。备份将每周/每月进行,主要原因是万一webapp的管理员意外删除了重要数据。我并不担心Google会丢失数据,因此在审核我的问题时不应考虑这一点。
所以我的问题是:这两种方法中哪一种是首选方法?哪一种更快,更有效,更便宜等?
提前感谢您的意见/帮助/解答。
答案 0 :(得分:7)
以下是一些需要考虑的因素以及我认为最能解决的解决方案:
开发时间 - 数据存储管理 - 要利用Bulkloader,您需要编写脚本,维护备份服务器,存储等等。
费用 - 数据存储管理 - YMMV,但我们使用的数千万实体的备份小于1bil任务队列配额的1%。数据存储区读取操作和存储的成本将特定于您的应用程序。但是在这两个选项之间,读取操作应该是相同的,并且您正在使用数据存储管理器在Bulkloader for Blobstore存储($ 0.0043 / GB)中交换Outgoing Bandwidth($ 0.12 / GB)。
备份持续时间 - 数据存储管理 - 正如您所料,mapreduce分片将数据写入Google网络中的Blobstore要比一次一个地传输实体数据快得多。使用Datastore Admin对我们的数据进行完整备份需要6个小时。使用Bulkloader需要3天时间。
备份维护 - Bulkloader(目前为止) - 使用Bulkloader和服务器,您可以创建crons以定期执行备份和备份维护。例如,我们在Rackspace中有一台服务器,每隔3天备份一次我们的数据存储,并保留最后2个备份。使用数据存储管理,您必须手动执行备份和删除过时备份,直到发布自动解决方案(Issue 7040)。即便如此,对于每月一次的备份,使用数据存储管理员手动执行此操作的成本非常低,我建议使用它。
数据灵活性 - Bulkloader - 使用bulkloader,您可以将所有数据导出为人类可读的csv文件,允许您在Excel中进行数据透视,为本地开发环境创建测试数据集,甚至可以根据需要将操作移动到其他应用程序托管服务(例如:AWS)它
精确还原 - Bulkloader - Bulkloader可以处理恢复选择实体(您确切知道删除或覆盖哪些实体)和批量恢复。数据存储管理员只能对给定种类的所有实体进行批量恢复。
批量还原 - 数据存储管理 - 数据存储管理员通过仅更新已更改的实体来最小化非常昂贵的写入。 Sharding还使这个过程比简单的Bulkloader上传快得多(尽管你可以自己在许多客户端上分割csv备份数据)。
最终Bulkloader可为您提供更精确的控制,而Datastore Admin可简化并加速批量备份/恢复。尽管Datastore Admin是新的并且有一些问题(7076),但考虑到你的情况,我肯定会推荐它。
答案 1 :(得分:4)
这是在本地运行下载操作,逐个实体或使用Map / Reduce在云端进行导出以及下载所有内容的已编译包之间的决定。
如果使用数据存储管理实用程序,可能会失败或损坏的可能性更小 - 个人而言,我总是在使用appcfg下载复杂模式时遇到问题,而且我从那时起就坚持使用数据存储管理员。
在速度方面 - 数据存储管理员绝对可以超越本地计算机并取决于您设置执行数据存储管理作业的任务队列的方式(using task queue rate control或{ {3}})。
在成本方面 - Map / Reduce可以非常快速地获得成本 - 在您可能没想到的地方。在一项需要删除144,000个实体的工作中,最终有近1154万(!!)个数据存储区写入调用。 appcfg
的批量下载程序不会触及您的写入配额或任务队列配额。
在效率方面 - AppEngine实例从数据存储区下载实体并将其放在Blobstore中比直接下载本地计算机要快得多。 Map / Reduce一般也非常有效,特别是在AppEngine上。
您的问题的答案取决于数据集的大小,预算以及您的耐心程度。 Map / Reduce(通过数据存储区管理员)将更加一致和快速,但根据您的设置可能会花费更多。