如果应用层级出现问题,那么这些错误紧随Windows上保存的Azure存储副本。因此,要恢复正确数据,需要保留一个备份。如今,许多应用程序开发员都已经实施了备份策略。而本文涉及的则是模拟运算表备份策略。
欲备份模拟运算表,应该对运算表进行迭代,然后搜索每个表格以便将实体数据复制到BLOB中或是不同的目的表格中。可对实体组进行处理以加快从Blob中恢复实体数据的进程。注意,本文中的示例是一个运算表的完整备份。
运算表备份
这里我们要了解一个简单的完整备份方案。该策略会输入系列表格,每个表格都有一些可分割表格搜索的密钥。这些密钥会被转化为若干范围,而单独备份这些范围可以提供整个表格的备份。将表格备份打乱成一定的排列范围,如此,就可以平行备份表格。TableKeyInfo类也可以纳入拆分密钥的逻辑中,如下所示:
public class TableKeysInfo { private List<PartitionKeyRange> keyList = new List<PartitionKeyRange>(); /// <summary> /// The table to backup /// </summary> public string TableName { get; set; } public TableKeysInfo(string tableName, string[] keys) { if (tableName == null) { throw new ArgumentNullException("tableName"); } if (keys == null) { throw new ArgumentNullException("keys"); } this.TableName = tableName; // sort the keys Array.Sort<string>(keys, StringComparer.InvariantCulture); // split key list {A, M, X} into {[null-A), [A-M), [M-X), [X-null)} this.keyList.Add(new PartitionKeyRange(null, keys.Length > 0 ? keys[0] : null)); for (int i = 1; i < keys.Length; i++) { this.keyList.Add(new PartitionKeyRange(keys[i - 1], keys[i])); } if (keys.Length > 0) { this.keyList.Add(new PartitionKeyRange(keys[keys.Length - 1], null)); } } /// <summary> /// The ranges of keys that will cover the entire table /// </summary> internal IEnumerable<PartitionKeyRange> KeyRangeList { get { return this.keyList.AsEnumerable<PartitionKeyRange>(); } } }
9 7 3 1 2 3 4 5 6 4 8 :
本文来源:不详 作者:佚名