2012-01-17 26 views
5

Tôi đang tìm cách tốt nhất để theo dõi vùng chứa/thư mục trong bộ nhớ Azure blob để thay đổi. Cho đến nay tôi chỉ tìm thấy một cách để làm điều này, đó là để chạy một quy trình công nhân ở đâu đó mà ping nội dung của thùng chứa một cách thường xuyên để tìm kiếm những thay đổi.Cách tốt nhất để giám sát vùng chứa trong bộ nhớ Azure blob để thay đổi là gì?

Có cách nào tốt hơn không?

+0

Nó có vẻ như nếu bạn muốn gây nên, bạn có để sử dụng SQL Azure. Dưới đây là một so sánh nhỏ đẹp: http://brian.chipsofttech.com/blogs/brian/post/Azure-Data-Storage.aspx –

+0

Trình kích hoạt SQL Azure không áp dụng cho vùng lưu trữ blob, cũng như SQL Azure không cung cấp khối lượng khả năng lưu trữ của blobs và container. –

Trả lời

9

SDK lưu trữ không cung cấp tính năng này, nhưng nó là tính năng chính trong SDK WebJobs mới. Có một thuộc tính [BlobInput] cho phép bạn chỉ định một vùng chứa để lắng nghe và nó bao gồm một trình nghe blob hiệu quả sẽ gửi đến phương thức khi phát hiện ra các đốm màu mới. Có một số ví dụ về các blob nghe tại địa chỉ: http://blogs.msdn.com/b/jmstall/archive/2014/02/18/azure-storage-bindings-part-1-blobs.aspx

Dưới đây là một cách sử dụng ví dụ:

public static void CopyWithStream(
     [BlobInput("container/in/{name}")] Stream input, 
     [BlobOutput("container/out1/{name}")] Stream output 
     ) 
    { 
     Debug.Assert(input.CanRead && !input.CanWrite); 
     Debug.Assert(!output.CanRead && output.CanWrite); 

     input.CopyTo(output); 
    } 

Và người nghe blob là dưới đây:

 JobHost host = new JobHost(acs); // From nuget: Microsoft.WindowsAzure.Jobs.Host 
     host.RunAndBlock(); 
+0

Điều đáng nói là hộp chứa đang được quét mỗi 10 phút (!). Vì vậy, công việc web sẽ không được kích hoạt ngay lập tức. – johni

1

Không có cách nào tốt hơn, IMHO. Lấy làm tiếc. HTH

0

Quyền của Igor, trong đó bạn cần phải thăm dò bình chứa. Tôi chỉ muốn làm rõ điều gì đó. Khi bạn nói:

chạy một quá trình lao động ở đâu đó mà ping nội dung của container trên một cách thường xuyên để tìm kiếm những thay đổi

Quá trình lao động có thể là một chủ đề trong một vai trò Web hay Worker Role, các Run() vòng lặp, vv Nó không đòi hỏi một vai trò riêng biệt. Chỉ cần đảm bảo mã bỏ phiếu của bạn hoạt động với nhiều trường hợp vai trò (ví dụ: bạn có thể muốn thực hiện một số loại cho thuê trang dưới dạng một mutex, để đảm bảo bạn đang bỏ phiếu chỉ từ một trường hợp). Bạn cũng có thể thực hiện điều này thông qua Azure Queues, vì tin nhắn hàng đợi giờ đây hỗ trợ thời gian chờ ẩn sau khi tạo tin nhắn.

4

Như những người khác đã nói, việc bỏ phiếu trong một khoảng thời gian hợp lý cho đơn đăng ký của bạn là OK. Nhưng bạn không cần phải kiểm tra nội dung. Bạn có thể kiểm tra ETag (nếu sử dụng HTTP thuần túy) hoặc bạn có thể kiểm tra BlobProperties.LastModifiedUtc nếu bạn đang sử dụng API.

+0

Ok, đó là những gì tôi nghĩ. Nó sẽ không được tốt đẹp nếu có một loại thông báo đẩy điều này ...? –

+0

@BillForney Có lẽ là có, nhưng xét đến kích thước có thể không giới hạn của container và toàn bộ bản chất phân tán của nó, nó không tầm thường để làm điều đó và mở rộng tốt và không giết cơ sở hạ tầng. –

+0

Có an toàn 100% để giả định rằng trong trường hợp chỉ kiểm tra trường BlobProperties.LastModifiedUtc của vùng chứa, bạn sẽ không bao giờ mất thay đổi? Chẳng thể có vấn đề gì ví dụ nếu nhiều máy được sử dụng để lưu trữ một thùng chứa lớn trên blob, không thể có một sự kiện khi sẽ có một "sửa đổi trong quá khứ"? – hpityu

0

Phân tích lưu trữ azure có chứa thông tin bắt buộc không? Bạn vẫn cần một cái gì đó để thực hiện việc bỏ phiếu.

1

Giả sử bạn có quyền kiểm soát mã cập nhật/thay đổi đốm màu, bạn có thể sử dụng SignalR để tạo thông báo đẩy bất cứ khi nào thay đổi blob do đó tránh cần phải lặp lại lặp lại.

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