从Google App引擎备份和还原实体

时间:2013-03-13 21:27:59

标签: java google-app-engine google-cloud-storage google-cloud-datastore database-backups

我希望实现一种在Google应用引擎中以编程方式将数据从一个应用程序传输到另一个应用程序的方法。 我知道有一种方法可以通过database_admin控制台来实现这一点,但是这个过程效率非常低。

我目前正在使用Google云端存储(GCS)来实现此功能,但这包括查询数据,将其保存到GCS,然后从不同的应用程序中读取GCS并进行恢复。 如果有人知道以编程方式在两个应用程序之间传输数据的简单方法,请告诉我。

谢谢!

4 个答案:

答案 0 :(得分:1)

我自己没试过,但听起来应该可行:使用data_store管理员将对象从一个应用程序备份到GCS,然后使用其他应用程序从GCS恢复该文件。如果您只需要一次同步,这应该是一个很好的方法。

如果您需要不断地将数据从一个应用程序复制到另一个应用程序,那么在一侧或两侧引入REST端点可能有所帮助:

https://code.google.com/p/appengine-rest-server/(我知道这是在Python中,但只是为REST端点定义了一个应用版本)

您只需确保您的模型定义在两侧都匹配(几乎使用相同的部署代码更新应用程序)并且只需要同步数据的一方跟踪上次同步的时间并使用REST引入新数据的端点。 Cron Jobs可以做到这一点。

或者,在每个模型上创建一个PostPut回调,以便每次将模型写入数据存储区到另一个应用程序上的正确REST端点时进行POST调用。

您可以使用一种方法批量更新,或使用其他方法保持不断更新的版本(以更多呼叫为代价)。

答案 1 :(得分:0)

您是在尝试在两个App Engine应用程序之间移动数据还是尝试从App Engine导出所有数据,以便移动到其他托管系统?您的问题没有足够的信息来了解您尝试做的事情。根据模糊的要求,我会说通常会使用您在一个公开数据的应用程序中编写的Web服务来处理,而另一个应用程序则调用该服务来使用数据。我不确定为什么Cloud Endpoints被投票,因为这提供了一种很好的方式来将您的数据作为基于JSON的Web服务公开,并且编写文件最少。

我建议在你的问题中添加更多细节,比如你想要完成什么,也许是模拟数据样本。

答案 2 :(得分:0)

您可以使用bulkloader创建数据备份,然后在另一个应用程序上恢复它。

详细信息: https://developers.google.com/appengine/docs/python/tools/uploadingdata?csw=1#Python_Downloading_and_uploading_all_data

如果您使用的是Java,请参阅此文章: Downloading Google App Engine Database

答案 3 :(得分:-1)

我不知道这是否适合您的具体情况,但Google Cloud Endpoints绝对是以编程方式从Google App Engine传输数据的简单方法。

这是一种REST Web服务的Google实现,因此它们允许您使用URL共享资源。这仍然是一项实验性技术,但只要我与他们合作,他们就能完美运作。此外,它们与GAE和Google Plugin for Eclipse很好地结合在一起。

您可以从JDO持久化类自动生成端点,我认为您也可以自动生成客户端库(尽管我没有尝试过)。