【问题标题】:How to insert into documentDB from Excel file containing 5000 records?如何从包含 5000 条记录的 Excel 文件插入到 documentDB?
【发布时间】:2015-01-28 06:48:36
【问题描述】:

我有一个最初有大约 200 行的 Excel 文件,我能够将 excel 文件转换为数据表,并且所有内容都正确插入到了 documentdb。

Excel 文件现在有 5000 行,在插入 30-40 条记录后没有插入,其余所有行都没有插入到文档数据库中

我发现了一些异常,如下所示。

Microsoft.Azure.Documents.DocumentClientException:异常: Microsoft.Azure.Documents.RequestRateTooLargeException,消息: {“错误”:[“请求率很大”]}

我的代码是:

    Service service = new Service();
    foreach(data in exceldata) //exceldata contains set of rows
    {
    var student = new Student();
    student.id= "";
    student.name = data.name;
    student.age = data.age;
    student.class = data.class;
    student.id = service.savetoDocumentDB(collectionLink,student); //collectionlink is a string stored in web.config
    students.add(student);
    }

Class Service
{
 public async Task<string> AddDocument(string collectionLink, Student data)
        {
            this.DeserializePayload(data);
            var result = await Client.CreateDocumentAsync(collectionLink, data);
            return result.Resource.Id;
        }
}

我做错了吗? 任何帮助都将不胜感激。

【问题讨论】:

    标签: c# database excel bulkinsert azure-cosmosdb


    【解决方案1】:

    更新

    截至 2015 年 4 月 8 日,DocumentDB 发布了数据导入工具,支持 JSON 文件、MongoDB、SQL Server 和 CSV 文件。你可以在这里找到它:http://www.microsoft.com/en-us/download/details.aspx?id=46436

    在这种情况下,您可以将 Excel 文件保存为 CSV,然后使用数据导入工具批量导入记录。

    原答案:

    DocumentDB 集合每秒供应 2,000 个请求单位。重要的是要注意 - 限制以请求单位而不是请求表示;因此,编写较大的文档比编写较小的文档成本更高,并且扫描比索引查找更昂贵。

    您可以通过检查 SDK 返回的 ResourceResponse/FeedResponse 对象中的 x-ms-request-charge HTTP 响应标头或 RequestCharge 属性来测量任何操作 (CRUD) 的开销。

    当您耗尽预置的吞吐量时,会引发 RequestRateTooLargeException。一些解决方案包括:

    • 遇到异常时,请稍作延迟后退并重试。 x-ms-retry-after-ms HTTP 响应标头中包含建议的重试延迟。或者,您可以简单地在短时间内批量处理请求
    • 使用惰性索引以获得更快的摄取率。 DocumentDB 允许您在集合级别指定索引策略。默认情况下,每次写入集合时都会同步更新索引。这使查询能够遵守与文档读取相同的一致性级别,而不会延迟索引“赶上”。惰性索引可用于在较长时间段内分摊索引内容所需的工作。不过需要注意的是,启用惰性索引后,无论为 DocumentDB 帐户配置的一致性级别如何,查询结果最终都将保持一致。
    • 如前所述,每个集合都有 2,000 个 RU 的限制 - 您可以通过跨多个集合和容量单位对数据进行分片/分区来提高吞吐量。
    • 删除空集合以利用所有预置吞吐量 - 在 DocumentDB 帐户中创建的每个文档集合都根据预置的容量单位 (CU) 数量和创建的集合数量分配保留的吞吐量容量。单个 CU 可提供 2,000 个请求单元 (RU) 并支持多达 3 个集合。如果只为 CU 创建一个集合,则整个 CU 吞吐量将可用于该集合。一旦创建了第二个集合,第一个集合的吞吐量将减半并分配给第二个集合,依此类推。为了最大限度地提高每个集合的可用吞吐量,我建议集合的容量单位数为 1:1。

    参考资料:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-11
      • 1970-01-01
      • 2019-04-27
      • 2022-01-01
      • 2021-01-31
      相关资源
      最近更新 更多