Xin chào Tôi đang sử dụng 16 bộ sưu tập để chèn khoảng 3-4 triệu đối tượng json từ 5-10k cho mỗi đối tượng.Tôi đang sử dụng quy trình lưu trữ để chèn các tài liệu này.Chèn số lượng lớn documentdb Azure bằng cách sử dụng thủ tục lưu sẵn
function bulkImport(docs) {
var collection = getContext().getCollection();
var collectionLink = collection.getSelfLink();
// The count of imported docs, also used as current doc index.
var count = 0;
// Validate input.
if (!docs) throw new Error("The array is undefined or null.");
var docsLength = docs.length;
if (docsLength == 0) {
getContext().getResponse().setBody(0);
}
// Call the CRUD API to create a document.
tryCreateOrUpdate(docs[count], callback);
// Note that there are 2 exit conditions:
// 1) The createDocument request was not accepted.
// In this case the callback will not be called, we just call setBody and we are done.
// 2) The callback was called docs.length times.
// In this case all documents were created and we don't need to call tryCreate anymore. Just call setBody and we are done.
function tryCreateOrUpdate(doc, callback) {
var isAccepted = true;
var isFound = collection.queryDocuments(collectionLink, 'SELECT * FROM root r WHERE r.id = "' + doc.id + '"', function (err, feed, options) {
if (err) throw err;
if (!feed || !feed.length) {
isAccepted = collection.createDocument(collectionLink, doc, callback);
}
else {
// The metadata document.
var existingDoc = feed[0];
isAccepted = collection.replaceDocument(existingDoc._self, doc, callback);
}
});
// If the request was accepted, callback will be called.
// Otherwise report current count back to the client,
// which will call the script again with remaining set of docs.
// This condition will happen when this stored procedure has been running too long
// and is about to get cancelled by the server. This will allow the calling client
// to resume this batch from the point we got to before isAccepted was set to false
if (!isFound && !isAccepted) getContext().getResponse().setBody(count);
}
// This is called when collection.createDocument is done and the document has been persisted.
function callback(err, doc, options) {
if (err) throw err;
// One more document has been inserted, increment the count.
count++;
if (count >= docsLength) {
// If we have created all documents, we are done. Just set the response.
getContext().getResponse().setBody(count);
} else {
// Create next document.
tryCreateOrUpdate(docs[count], callback);
}
}
mã C# của tôi trông như thế này
public async Task<int> Add(List<JobDTO> entities)
{
int currentCount = 0;
int documentCount = entities.Count;
while(currentCount < documentCount)
{
string argsJson = JsonConvert.SerializeObject(entities.Skip(currentCount).ToArray());
var args = new dynamic[] { JsonConvert.DeserializeObject<dynamic[]>(argsJson) };
// 6. execute the batch.
StoredProcedureResponse<int> scriptResult = await DocumentDBRepository.Client.ExecuteStoredProcedureAsync<int>(sproc.SelfLink, args);
// 7. Prepare for next batch.
int currentlyInserted = scriptResult.Response;
currentCount += currentlyInserted;
}
return currentCount;
}
Vấn đề tôi đang phải đối mặt là ra khỏi 400k tài liệu mà tôi cố gắng để chèn vào văn bản lần bị bỏ lỡ với ra cho bất kỳ lỗi.
Ứng dụng là vai trò công nhân được triển khai trên đám mây. Nếu tôi tăng số lượng các chủ đề hoặc các trường hợp chèn vào trong documentDB thì số lượng tài liệu bị mất sẽ cao hơn nhiều.
cách tìm ra vấn đề là gì. Thanks in Advance.
Có điều gì hữu ích trong [câu hỏi này] (http://stackoverflow.com/questions/28186260/how-to-insert-into-documentdb-from-excel-file-containing-5000-records) (nói về các ngoại lệ bạn có thể nhận được) hoặc [câu hỏi này] (http://stackoverflow.com/questions/28318716/how-to-import-bulk-data-in-documentdb-from-excel) (đưa ra một ví dụ mã mà bạn có thể có đã thấy)? – shoover
vâng tôi đã thấy điều đó rồi ..vì một số lý do không rõ Tài liệu db bỏ qua thêm tài liệu khi chèn hàng loạt ... Tôi đang nói đến hàng triệu tài liệu ở đây và nó là loại lẻ tẻ – varunpathak
bạn có thể vui lòng gửi email cho tôi để chúng tôi có thể đào sâu vào điều này không. chúng tôi sẽ cần một số chi tiết từ bạn như tên điểm cuối, hoạt động-id, v.v. –