2012-07-10 84 views
1

如果我有一个关键任务数据库,需要定期备份,并将它作为scriptdb存储在GAS中,有什么方法可以备份实际的数据库文件吗?看起来db是以一种使脚本在脚本之外不可见的方式嵌入的?如何备份Google Apps脚本的scriptdb

回答

1

我想我在上面找到了一个像样的解决方案,在一个意想不到的地方。我可以使用Google Fusion Table/s - 而不是使用scriptdb,它们具有SQL类型的访问权限,是可以导出,备份,查看等的具体文档,可以充当我的应用的数据存储区...

3

那么,你可以随时查询你所有的值和JSON.stringify他们。 如果您需要从中恢复数据库,我可以注意到的唯一区别是每个项目ID都会改变。

下面是一个例子:

function backupDB() { 
    var db = ScriptDb.getMyDb(); 
    var res = db.query({}); 
    var array = []; 
    while(res.hasNext()) 
    array.push(res.next().toJson()); 
    var dbString = JSON.stringify(array); 
    Logger.log(dbString); //you'll obviously save this string somewhere else e.g. as a docs file 
} 

您可能还需要做到这一点的块,因为你的数据库可能有太多数据的脚本来处理一次,像这样。

我也觉得这个“备份”过程也应该由API来照顾。上面的代码只是我的一个想法。

+0

是的,这是一个很好的解决方法,但我希望Apps脚本将有更多的东西嵌入。如果人们将要将关键数据委托给scriptdb,那么只能以强大而经常的方式对其进行备份 – BruceM 2012-07-10 15:17:55

+1

让代码自动备份数据(例如,使用时间驱动的触发器)似乎很棒对我来说很强大,如果你有一些关键的应用程序脚本运行,那么你应该是一个足够好的开发人员来写一个“关键”的备份。但是,是的,更“嵌入”的东西确实是非常好的。现在,如果你认为这是一个“增强请求”而不是一个真正的问题,那么你就错了。你应该在[Apps Script Issue Tracker]中提交一个。(http://code.google.com/p/google-apps-script-issues/issues/list) – 2012-07-10 18:53:06

+0

如果你遵循良好的做法来创建,使用和依赖在您的脚本创建的ID重新导入将没有副作用。 – Luciano 2012-10-01 16:35:55

0

也许您可以将关键数据从scriptdb复制到Google Spreadsheet。鉴于其在谷歌开发人员的例子,我认为这是一个有趣的选择。

这是链接:Copy a Database to a New Sheet in a Spreadsheet

+0

是的,又一个很好的解决方法... – BruceM 2012-07-10 18:41:56

1

实际的答案是:你不存储在ScriptDb的关键任务数据,原因是多方面的:

  1. appscript没有SLA。谷歌有许多其他存储有确保。
  2. 由于该数据库不支持事务,因此无法保证批处理可能会处理两次相同的数据(如果脚本在块备份或还原过程中失败)。
  3. 如果将ID存储在数据库中的其他对象内,它会变得复杂。