ミッション クリティカルなデータベースを定期的にバックアップする必要があり、それを GAS に scriptdb として保存する場合、実際のデータベース ファイルをバックアップする方法はありますか? db は、スクリプトの外では見えないように埋め込まれているようですか?
4 に答える
まあ、いつでもすべての値と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 で処理する必要があると思います。上記のコードは、私が思いついたアイデアです。
予想外の場所で、上記の質問に対する適切な解決策を見つけたと思います。scriptdb を使用する代わりに、Google Fusion Table/s を使用できます。これらには SQL タイプのアクセスがあり、エクスポート、バックアップ、表示などが可能な具体的なドキュメントであり、アプリのデータ ストアとして機能できます...
実際の答えは次のとおりです。ミッション クリティカルなデータを scriptdb に保存しないのには、多くの理由があります。
- appscript には SLA がありません。Google には、保証のある他の多くのストレージがあります。
- そのデータベースはトランザクションをサポートしていないため、バッチ プロセスが同じデータを 2 回処理する可能性があることを保証できません (チャンク バックアップまたは復元の途中でスクリプトが失敗した場合)。
- データベース内の他のオブジェクト内に ID を格納すると、複雑になります。
おそらく、重要なデータを scriptdb から Google スプレッドシートにコピーできます。Google 開発者の例を考えると、これは興味深いオプションだと思います。
リンクは次のとおりです。Copy a Database to a New Sheet in a Spreadsheet。