1

我目前正在寻找备份 Google App Engine 的 webapp 数据存储的最佳方法。从我一直在做的阅读来看,我似乎有两种不同的方法可以做到这一点。我可以通过调用 appcfg.py upload_data --application= --kind= --filename= 来使用 GAE 的批量加载程序,或者我可以进入我的 webapp 的数据存储管理部分,选择我要备份的实体,然后单击“备份实体”按钮。除非我弄错了,否则“备份实体”按钮将在 blobstore 中创建我的数据存储的备份,而使用 appcfg.py 的 download_data 将创建本地备份。备份将每周/每月进行一次,主要原因是万一 webapp 的管理员不小心删除了重要数据。我不担心谷歌丢失数据,

所以我的问题是:这两种方法中的哪一种是首选方法?其中哪一个更快、更高效、更便宜等?

提前感谢您的评论/帮助/答案。

4

2 回答 2

7

以下是一些需要考虑的因素以及我认为最好的解决方案:

Dev Time - Datastore Admin - 要利用 Bulkloader,您需要编写脚本、维护备份服务器、存储等。

成本-数据存储区管理员- YMMV,但我们对数千万个实体的备份使用了不到 10 亿个任务队列配额的 1%。数据存储读取操作和存储的成本将取决于您的应用程序。但是在这两个选项之间,读取操作应该是相同的,并且您使用 Datastore Admin 将 Bulkloader 中的传出带宽 ($0.12/GB) 换成 Blobstore 存储 ($0.0043/GB)。

备份持续时间-数据存储区管理员- 正如您所期望的,mapreduce 分片将数据写入 Google 网络内的 Blobstore 比一次将实体数据流式传输要快得多。使用 Datastore Admin 对我们的数据进行完整备份需要不到 6 小时。使用 Bulkloader 需要 3 天以上。

备份维护- Bulkloader(目前) - 使用 Bulkloader 和服务器,您可以创建 crons 以定期执行备份和备份维护。例如,我们在 Rackspace 中有一台服务器,它每 3 天备份一次我们的数据存储,并保留最后 2 次备份。使用 Datastore Admin,您必须手动执行备份并删除过时的备份,直到发布自动化解决方案(问题 7040)。尽管如此,对于每月一次的备份,使用 Datastore Admin 手动执行的成本非常低,我推荐它。

数据灵活性- Bulkloader - 使用 bulkloader,您可以将所有数据导出到人类可读的 csv 文件中,从而允许您在 Excel 中对其进行透视,为您的本地开发环境创建测试数据集,甚至将您的操作移动到另一个应用程序托管服务(例如: AWS)如果您需要它。

Precision Restore - Bulkloader - Bulkloader 可以处理恢复选定实体(您确切地知道您删除或覆盖了哪些实体)和批量恢复。数据存储区管理员只能对给定种类的所有实体进行批量恢复。

批量还原-数据存储区管理员- 数据存储区管理员通过仅更新更改的实体来最大限度地减少非常昂贵的写入。分片也使这个过程比简单的 Bulkloader 上传快得多(尽管您可以自己在许多客户端上分片 csv 备份数据)。

最终,Bulkloader 为您提供更精确的控制,而 Datastore Admin 简化并加速了批量备份/恢复。即使 Datastore Admin 是新的并且有一些问题(7076),鉴于您的情况,我绝对会推荐它。

于 2012-03-13T22:41:51.910 回答
4

这实际上是在本地运行下载操作、逐个实体或使用 Map/Reduce 在云中导出并下载所有内容的编译包之间做出的决定。

如果您使用数据存储管理实用程序,失败或损坏的可能性可能会更小 - 就个人而言,我一直在使用 appcfg 下载复杂模式时遇到问题,从那以后我一直坚持使用数据存储管理。

就速度而言- 数据存储管理员绝对可以超越本地计算机并超越本地计算机,具体取决于您如何设置执行数据存储管理员作业的任务队列(使用任务队列速率控制或通过参数将任务发送到专用后端target)。

就成本而言- Map/Reduce 可能会很快变得昂贵 - 在您可能没想到的地方。在一项需要删除 144,000 个实体的作业中,最终有近 1154 万 (!!) 个数据存储写入调用。appcfg的批量下载器不会触及您的写入配额或任务队列配额。

就效率而言- AppEngine 实例从数据存储区下载实体并将其放入 Blobstore 可能比本地计算机直接下载要快得多。一般来说,Map/Reduce 也非常有效,尤其是在 AppEngine 上。

您的问题的答案取决于您的数据集的大小、您的预算以及您有多少耐心。Map/Reduce(通过数据存储管理员)将更加一致和更快,但可能会花费更多,具体取决于您的设置。

于 2012-03-08T23:50:19.713 回答