gpt4 book ai didi

google-app-engine - 通过 Cronjob 备份 Datastore

转载 作者:太空宇宙 更新时间:2023-11-03 15:35:11 24 4
gpt4 key购买 nike

所以这是备份数据存储的 native cronjob 条目

cron:
- description: My Daily Backup
url: /_ah/datastore_admin/backup.create?name=BackupToCloud&kind=LogTitle&kind=EventLog&filesystem=gs&gs_bucket_name=whitsend
schedule: every 12 hours
target: ah-builtin-python-bundle

如果我有一个带空格的 kind,我该怎么做呢?因此,如果我的种类是“日志标题”,我会喜欢 kind=Log%20Title 吗?

不管它是否有空格,这似乎都不起作用。有谁知道我还需要做些什么来确保备份?

我在 admin.appengine.google.comah-builtin-python-bundle 日志中没有看到它.

我似乎无法再手动备份,因为当我单击“数据存储管理”时,它会将我带到一个没有内容的页面。 ( Google Bug Report )

如有任何帮助,我们将不胜感激。附言。我正在使用 PHP App Engine。

最佳答案

首先,我建议您使用 HTML 编码 <code>&amp;</code> 转义与号 (&) 作为快速解决方案。

所以你会:

cron:
- description: My Daily Backup
url: /_ah/datastore_admin/backup.create?name=BackupToCloud&amp;kind=LogTitle&amp;kind=EventLog&amp;filesystem=gs&amp;gs_bucket_name=whitsend
schedule: every 12 hours
target: ah-builtin-python-bundle

但该 URL 不能超过 402 个字符,因此更好的解决方案是编写您自己的 servlet,通过自动添加各种实体类型来处理备份。我知道您正在运行 PHP 后端,但这是我的代码中的 XML 和 Java 示例。

cron.xml 中的 cron 定义

<cron>
<description>Daily backups New Way</description>
<url>/cron/backups</url>
<schedule>every day 06:00</schedule>
<timezone>America/Los_Angeles</timezone>
</cron>

web.xml 中的 url 映射

<servlet>
<servlet-name>BackupServlet</servlet-name>
<servlet-class>com.your.package.BackupServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BackupServlet</servlet-name>
<url-pattern>/cron/backups</url-pattern>
</servlet-mapping>

queue.xml 中的备份任务

<queue>
<name>backup-queue</name>
<rate>25/s</rate>
<bucket-size>25</bucket-size>
<max-concurrent-requests>25</max-concurrent-requests>
</queue>

Servlet 类 BackupServlet.java

public class BackupServlet extends HttpServlet {

private Queue queue = QueueFactory.getQueue("backup-queue");
private static final Logger log = Logger.getLogger(BackupServlet.class.getName());

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

List<String> entities = DatastoreUtils.getEntityList();

// Print query results
for (String kind : entities) {
log.info("Creating backup task for " + kind);
queue.add(withUrl("/_ah/datastore_admin/backup.create").param("name", "datastore-backup-" + kind + "-").param("kind", kind)
.param("filesystem", "gs").param("gs_bucket_name", ADMIN_BACKUPS_BUCKET));

}

response.setStatus(HttpServletResponse.SC_OK);

}
}

最后是 DatastoreUtils.java 中的 getEntityList()

public static List<String> getEntityList() {
List<String> rc = new ArrayList<String>(50);

DatastoreService ds = DatastoreServiceFactory.getDatastoreService();

// Start with unrestricted kind query
Query q = new Query(Entities.KIND_METADATA_KIND);

List<Filter> subFils = new ArrayList<Filter>();

// Limit to lowercase initial letters
subFils.add(new FilterPredicate(Entity.KEY_RESERVED_PROPERTY, Query.FilterOperator.GREATER_THAN_OR_EQUAL, Entities.createKindKey("A")));

String endChar = Character.toString('Z'); // Character after 'z'

subFils.add(new FilterPredicate(Entity.KEY_RESERVED_PROPERTY, Query.FilterOperator.LESS_THAN_OR_EQUAL, Entities.createKindKey(endChar)));

q.setFilter(CompositeFilterOperator.and(subFils));

// Print query results
for (Entity e : ds.prepare(q).asIterable()) {
rc.add(e.getKey().getName());
}

return rc;
}

关于google-app-engine - 通过 Cronjob 备份 Datastore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28885200/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com