保护模拟运算表并使其不受应用错误的影响
2010-06-21 00:00:00 来源:WEB开发网如果Azure存储以及保存了多个数据副本,那么应用应该在Windows Azure存储中备份数据吗?为了维持商业的连续性,有必要对数据实施保护,使其免受应用错误的干扰,因为这些错误可能会导致数据被错误地修改。
如果应用层级出现问题,那么这些错误紧随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>();
}
}
}
更多精彩
赞助商链接