Có thể lưu trữ ~ 3,5TB dữ liệu và chèn khoảng 1K / giây 24x7, đồng thời truy vấn ở tốc độ không được chỉ định với SQL Server, nhưng có nhiều câu hỏi hơn:
- yêu cầu sẵn có nào bạn có cho điều này? Thời gian hoạt động 99,999% hay là đủ 95%?
- yêu cầu độ tin cậy nào bạn có? Việc thiếu phụ trang có khiến bạn mất 1 triệu đô la không?
- bạn có yêu cầu gì về khả năng phục hồi? Nếu bạn mất một ngày dữ liệu, nó có quan trọng không?
- yêu cầu nhất quán nào bạn có? Bài viết có cần được đảm bảo hiển thị trong lần đọc tiếp theo không?
Nếu bạn cần tất cả những yêu cầu này, tôi đã nhấn mạnh, mức tải bạn đề xuất sẽ tốn hàng triệu USD cho phần cứng và cấp phép trên một hệ thống quan hệ, bất kỳ hệ thống nào, bất kể bạn thử mánh lới quảng cáo nào (sharding, phân vùng, v.v.). Theo định nghĩa của họ, một hệ thống nosql sẽ không đáp ứng tất cả các yêu cầu này.
Vì vậy, rõ ràng là bạn đã nới lỏng một số yêu cầu này. Có một hướng dẫn trực quan tuyệt vời so sánh các dịch vụ nosql dựa trên mô hình 'chọn 2 trong số 3' tại Hướng dẫn trực quan cho Hệ thống NoSQL :
Sau khi cập nhật bình luận OP
Với SQL Server, điều này sẽ được triển khai ngay lập tức:
- một phím nhóm bảng (GUID, thời gian). Có, sẽ bị phân mảnh , nhưng phân mảnh có ảnh hưởng đến quá trình đọc trước hay không và chỉ cần đọc trước cho các lần quét phạm vi quan trọng. Vì bạn chỉ truy vấn GUID và phạm vi ngày cụ thể nên việc phân mảnh sẽ không quan trọng lắm. Có, là một khóa rộng, vì vậy các trang không phải là lá sẽ có mật độ khóa kém. Có, nó sẽ dẫn đến hệ số lấp đầy kém. Và có, có thể xảy ra hiện tượng tách trang. Bất chấp những vấn đề này, với các yêu cầu, vẫn là lựa chọn khóa cụm tốt nhất.
- phân vùng bảng theo thời gian để bạn có thể thực hiện xóa hiệu quả các bản ghi đã hết hạn thông qua cửa sổ trượt tự động . Tăng cường điều này bằng cách xây dựng lại phân vùng chỉ mục trực tuyến của tháng trước để loại bỏ yếu tố lấp đầy kém và phân mảnh được giới thiệu bởi phân nhóm GUID.
- cho phép nén trang. Vì các nhóm khóa được gom lại bởi GUID trước, tất cả các bản ghi của GUID sẽ nằm cạnh nhau, tạo cơ hội tốt cho việc nén trang để triển khai nén từ điển.
- bạn sẽ cần một đường dẫn IO nhanh cho tệp nhật ký. Bạn quan tâm đến thông lượng cao, không phải độ trễ thấp để nhật ký theo kịp với 1K lần chèn / giây, vì vậy việc loại bỏ là điều bắt buộc.
Mỗi phân vùng và nén trang đều yêu cầu SQL Server Phiên bản Doanh nghiệp, chúng sẽ không hoạt động trên Phiên bản Tiêu chuẩn và cả hai đều khá quan trọng để đáp ứng các yêu cầu.
Một lưu ý nhỏ là, nếu các bản ghi đến từ trang trại máy chủ Web front-end, tôi sẽ đặt Express trên mỗi máy chủ web và thay vì INSERT ở back end, tôi sẽ SEND
đưa thông tin vào back end, sử dụng kết nối / giao dịch cục bộ trên Express cùng đặt với máy chủ web. Điều này mang lại một câu chuyện về tính khả dụng tốt hơn nhiều cho giải pháp.
Vì vậy, đây là cách tôi sẽ làm điều đó trong SQL Server. Tin tốt là những vấn đề bạn gặp phải đã được hiểu rõ và các giải pháp đã được biết đến. điều đó không nhất thiết có nghĩa là điều này tốt hơn những gì bạn có thể đạt được với Cassandra, BigTable hoặc Dynamo. Tôi sẽ cho một người nào đó có thể hiểu rõ hơn về những thứ không-sql-ish để tranh luận về trường hợp của họ.
Lưu ý rằng tôi chưa bao giờ đề cập đến mô hình lập trình, hỗ trợ .Net và những thứ tương tự. Tôi thành thật nghĩ rằng chúng không liên quan trong các đợt triển khai lớn. Chúng tạo ra sự khác biệt rất lớn trong quá trình phát triển, nhưng một khi được triển khai thì không quan trọng là tốc độ phát triển nhanh như thế nào, nếu chi phí ORM giết chết hiệu suất :)