2010-10-07 36 views
7

Phiên bản ngắn: Chúng ta có thể đọc từ hàng chục hoặc hàng trăm phân đoạn bảng theo cách đa luồng để tăng hiệu suất theo đơn đặt hàng của cường độ không?Hiệu suất lưu trữ bảng Azure từ đọc song song cực lớn

Phiên bản dài: Chúng tôi đang làm việc trên hệ thống lưu trữ hàng triệu hàng trong bộ nhớ bảng Azure. Chúng tôi phân vùng dữ liệu thành các phân vùng nhỏ, mỗi phân vùng chứa khoảng 500 bản ghi, đại diện cho giá trị ngày của dữ liệu cho một đơn vị.

Vì Azure không có tính năng "tổng hợp", để kéo dài một năm dữ liệu, chúng tôi phải sử dụng một số bộ nhớ đệm trước hoặc tổng hợp dữ liệu trong vai trò web hoặc vai trò công nhân Azure.

Giả sử như sau: - Đọc một phân vùng không ảnh hưởng đến hiệu suất của khác - Đọc một phân vùng có một nút cổ chai dựa trên tốc độ mạng và truy máy chủ

Sau đó chúng tôi có thể mất một đoán rằng nếu chúng ta muốn để nhanh chóng tổng hợp rất nhiều dữ liệu trên bay (1 năm, 365 phân vùng), chúng tôi có thể sử dụng một thuật toán song song ồ ạt và nó sẽ quy mô gần như hoàn hảo với số lượng chủ đề. Ví dụ, chúng ta có thể sử dụng các phần mở rộng song song .NET với hơn 50 luồng và có được một hiệu năng HUGE.

Chúng tôi đang nỗ lực để thiết lập một số thử nghiệm, nhưng tôi muốn xem liệu điều này đã được thực hiện chưa. Vì phía .NET cơ bản không hoạt động trên các hoạt động có độ trễ cao, điều này có vẻ hoàn hảo cho việc đa luồng.

+0

Bạn có nhận xét gì trong 6 năm sau không? – mayu

+0

Vâng, nó hoàn toàn là một ý tưởng tốt, đặc biệt là kể từ khi các mục tiêu khả năng mở rộng đã được đi lên theo thời gian. Hãy xem trang này để hiểu các giới hạn: https://docs.microsoft.com/en-us/azure/storage/storage-scalability-targets –

Trả lời

4

Có giới hạn đối với số lượng giao dịch có thể được thực hiện đối với tài khoản lưu trữ và phân vùng hoặc máy chủ lưu trữ cụ thể trong một khoảng thời gian nhất định (khoảng 500 req/s). Vì vậy, theo nghĩa đó, có một giới hạn hợp lý đối với số lượng yêu cầu bạn có thể thực thi song song (trước khi nó bắt đầu trông giống như một cuộc tấn công DoS).

Ngoài ra, khi triển khai, tôi sẽ cảnh giác với các giới hạn kết nối đồng thời được áp đặt trên máy khách, chẳng hạn như System.Net.ServicePointManager. Tôi không chắc liệu máy khách lưu trữ Azure có phải tuân theo các giới hạn đó hay không; họ có thể yêu cầu điều chỉnh.

+0

Giới hạn 500 req/s là cho mỗi phân vùng. Giới hạn cho một tài khoản là "vài nghìn" mỗi giây. Sử dụng một máy ảo nhỏ, tôi đã nhận thấy rất ít cải thiện hiệu suất sử dụng hơn 20 luồng. – knightpfhor

+1

Cập nhật cho đến nay - Trong thử nghiệm của tôi, tôi đã có thể đọc 365.000 hàng bằng cách sử dụng 365 luồng và tôi nhận được dữ liệu trung bình khoảng 7 giây. Đối với 30.000 hàng trải rộng trên 30 phân vùng bằng 30 chủ đề, tôi đã tính trung bình 1,4 giây. Chiến thắng lớn! –

+2

@ JasonYoung bạn có thể đăng một số mẫu mã không? – Alkasai

Các vấn đề liên quan