AppEngine数据存储 - 以编程方式备份

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AppEngine数据存储 - 以编程方式备份相关的知识,希望对你有一定的参考价值。

我想定期以编程方式备份​​我的应用程序的数据存储区。

根据https://developers.google.com/appengine/articles/scheduled_backups的说法,似乎可以创建一个备份数据存储区的cron

但是,我需要更细粒度的解决方案:为动态更改名称空间创建不同的备份文件。

是否可以使用GET / POST简单地调用/_ah/datastore_admin/backup.create url?

答案

是;我正是这样做,以实现一些无法用cron完成的逻辑。

使用taskqueue API添加URL请求,如下所示:

from google.appengine.api import taskqueue
taskqueue.add(url='/_ah/datastore_admin/backup.create',
              method='GET',
              target='ah-builtin-python-bundle',
              params={'kind': ('MyKind1', 'MyKind2')})

如果你想使用更多的参数,否则这些参数会进入cron url,比如'filesystem',把它们放在params dict旁边'kind'。

另一答案

以编程方式根据环境备份数据存储

除了杰米的回答之外,这还有。我需要根据环境(登台/生产)将数据存储备份到云存储。不幸的是,这不能再通过cronjob实现,所以我需要以编程方式完成并为我的脚本创建一个cron。我可以确认下面的内容是有效的,因为我看到有些人抱怨他们得到了404.但是,它只适用于实时环境,而不是本地开发服务器。

from datetime import datetime

from flask.views import MethodView

from google.appengine.api import taskqueue
from google.appengine.api.app_identity import app_identity


class BackupDatastoreView(MethodView):

    BUCKETS = {
        'app-id-staging': 'datastore-backup-staging',
        'app-id-production': 'datastore-backup-production'
    }

    def get(self):

        environment = app_identity.get_application_id()

        task = taskqueue.add(
            url='/_ah/datastore_admin/backup.create',
            method='GET',
            target='ah-builtin-python-bundle',
            queue_name='backup',
            params={
                'filesystem': 'gs',
                'gs_bucket_name': self.get_bucket_name(environment),
                'kind': (
                    'Kind1',
                    'Kind2',
                    'Kind3'
                )
            }
        )

        if task:
            return 'Started backing up %s' % environment

    def get_bucket_name(self, environment):

        return "{bucket}/{date}".format(
            bucket=self.BUCKETS.get(environment, 'datastore-backup'),
            date=datetime.now().strftime("%d-%m-%Y %H:%M")
        )
另一答案

您现在可以使用托管导出和导入功能,可以通过gcloud或数据存储管理API访问:

Exporting and Importing Entities

Scheduling an Export

以上是关于AppEngine数据存储 - 以编程方式备份的主要内容,如果未能解决你的问题,请参考以下文章

Python GAE - 如何以编程方式将数据从备份导出到 Big Query?

在 AppEngine/GWT 中的客户端本地存储数据

如何以编程方式备份​​ SD 卡中的 sqlite 文件?

关注 AppEngine 上的数据存储模型结构 - 按日期排序关注者

以编程方式导入 Room 数据库

以编程方式更改 SSIS 上备份数据库任务的备份文件路径