Câu hỏi rất thú vị !!! Mở rộng câu trả lời @ Brian Reischl (và rất nhiều của nó đang nghĩ out loud, vì vậy hãy chịu với tôi :))
Giả định:
- tổ chức của bạn là serializable trong một số hình thức nào. Tôi cho rằng bạn sẽ nhận được dữ liệu thô ở định dạng XML.
- Bạn có một vai trò công nhân riêng biệt đang thực hiện tất cả việc đọc các thực thể.
- Bạn biết cần bao nhiêu vai trò công nhân để viết các thực thể được sửa đổi.Vì lợi ích của lập luận, hãy giả sử nó là 20 như bạn đã đề cập.
Giải pháp:
Trước tiên, bạn sẽ tạo ra 20 container blob. Hãy đặt tên chúng là container-00, container-01, ... container-19.
Sau đó, bạn bắt đầu đọc các thực thể - 1000 tại một thời điểm. Vì bạn đang nhận dữ liệu thô ở định dạng XML ngoài bộ nhớ bảng, bạn tạo một tệp XML và lưu trữ 1000 thực thể đó trong vùng chứa-00. Bạn tìm nạp các bộ thực thể tiếp theo và lưu chúng ở định dạng XML trong vùng chứa-01 và cứ tiếp tục như vậy cho đến khi bạn nhấn vào thùng chứa-19. Sau đó, tập hợp các thực thể tiếp theo đi vào vùng chứa-00. Bằng cách này, bạn phân phối đồng đều các thực thể của mình trên tất cả 20 vùng chứa.
Khi tất cả các thực thể được viết, vai trò công nhân của bạn để xử lý các thực thể này sẽ được đưa vào ảnh. Vì chúng ta biết rằng các cá thể trong Windows Azure được sắp xếp theo thứ tự, bạn nhận được các tên dụ như WorkerRole_IN_0, WorkerRole_IN_1, ... và cứ thế.
Những gì bạn sẽ làm là lấy tên dụ, lấy số "0", "1" vv Dựa trên điều này, bạn sẽ xác định trường hợp vai trò công nhân nào sẽ đọc từ vùng chứa blob nào ... WorkerRole_IN_0 sẽ đọc tệp từ container-00, WorkerRole_IN_1 sẽ đọc tệp từ vùng chứa-01 và cứ tiếp tục như vậy.
Bây giờ cá thể vai trò công nhân cá nhân của bạn sẽ đọc tệp XML, tạo các thực thể từ tệp XML đó, cập nhật các thực thể đó và lưu nó trở lại bộ nhớ bảng. Khi quá trình này được thực hiện, sau đó bạn sẽ xóa tệp XML và bạn chuyển sang tệp tiếp theo trong vùng chứa đó. Khi tất cả các tệp được đọc và xử lý, bạn chỉ có thể xóa vùng chứa. Như tôi đã nói trước đây, đây là một loại giải pháp "suy nghĩ to" và một số thứ phải được xem xét như những gì xảy ra khi vai trò công nhân "người đọc" đi xuống và những thứ khác.
Nguồn
2013-06-26 17:54:51
FWIW, bây giờ tôi đã trích xuất các thực thể bảng 5.35M thành cơ sở dữ liệu SQL bằng cách sử dụng một luồng trên một nhân viên không có sự không đồng bộ. Mất 75 phút, và tôi nghĩ rằng SQL là nút cổ chai trong trường hợp này. –