gpt4 book ai didi

c# - 批量插入Azure存储表

转载 作者:行者123 更新时间:2023-11-30 21:31:53 26 4
gpt4 key购买 nike

我刚开始使用 azure 存储表。我试图批量插入我的实体,但我发现您无法执行具有不同分区键的批量操作。

有什么方法可以将大约 10,000 - 20,000 个文件详细信息插入到表中。

这是我迄今为止尝试过的:

public class Manifest:TableEntity
{
private string name;
private string extension;
private string filePath;
private string relativePath;
private string mD5HashCode;
private string lastModifiedDate;

public void AssignRowKey()
{
this.RowKey = relativePath.ToString();
}
public void AssignPartitionKey()
{
this.PartitionKey = mD5HashCode;
}
public string Name { get { return name; } set { name = value; } }
public string Extension { get { return extension; } set { extension = value; } }
public string FilePath { get { return filePath; } set { filePath = value; } }
public string RelativePath { get { return relativePath; } set { relativePath = value; } }
public string MD5HashCode { get { return mD5HashCode; } set { mD5HashCode = value; } }
public string LastModifiedDate { get { return lastModifiedDate; } set { lastModifiedDate = value; } }

}

我的方法位于不同的类中:

static async Task BatchInsert(CloudTable table, IEnumerable<FileDetails> files)
{
int rowOffset = 0;

var tasks = new List<Task>();

while (rowOffset < files.Count())
{
// next batch
var rows = files.Skip(rowOffset).Take(100).ToList();

rowOffset += rows.Count;

var task = Task.Factory.StartNew(() =>
{

var batch = new TableBatchOperation();

foreach (var row in rows)
{
Manifest manifestEntity = new Manifest
{
Name = row.Name,
Extension = row.Extension,
FilePath = row.FilePath,
RelativePath = row.RelativePath.Replace('\\', '+'),
MD5HashCode = row.Md5HashCode,
LastModifiedDate = row.LastModifiedDate.ToString()
};
manifestEntity.AssignPartitionKey();
manifestEntity.AssignRowKey();
batch.InsertOrReplace(manifestEntity);
}

// submit
table.ExecuteBatch(batch);

});

tasks.Add(task);
}

await Task.WhenAll(tasks);
}

最佳答案

如果要使用批量操作,批量中的实体必须具有相同的PartitionKey。不幸的是,除了将它们单独保存在您的案例中之外,没有其他选择。

分区键存在的原因是 Azure 可以跨计算机分发数据,而分区之间无需协调。系统的设计使得不同的分区不能在同一事务或操作中使用。

您可以对此投票issue推进该功能的实现。

关于c# - 批量插入Azure存储表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52753509/

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