关于c#:如何从包含5000条记录的Excel文件插入documentDB?

How to insert into documentDB from Excel file containing 5000 records?

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

Excel文件现在具有5000行,并且在插入30-40条记录后不会插入,并且所有行的其余部分未插入到documentdb

我发现了一些如下异常。

Microsoft.Azure.Documents.DocumentClientException: Exception:
Microsoft.Azure.Documents.RequestRateTooLargeException, message:
{"Errors":["Request rate is large"]}

我的代码是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    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;
        }
}

我做错什么了吗?
任何帮助都是非常可观的。


更新:

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

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

原始答案:

DocumentDB Collections每秒配置2,000个请求单位。重要的是要注意-限制是按请求单位而不是请求来表示的;因此写较大的文档比较小的文档要花更多的钱,而扫描比索引搜索要贵。

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

耗尽已配置的吞吐量时,将引发RequestRateTooLargeException。一些解决方案包括:

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

参考文献:

  • DocumentDB性能提示:
    http://azure.microsoft.com/blog/2015/01/27/performance-tips-for-azure-documentdb-part-2/
  • DocumentDB限制:
    http://azure.microsoft.com/zh-CN/documentation/articles/documentdb-limits/