Có rất nhiều công cụ và phương pháp đa dạng, nhưng tôi nghĩ không ai trong số họ có thể tỏa sáng trong tất cả các yêu cầu.
Đối với độ trễ thấp, bạn chỉ có thể dựa vào quyền truy cập dữ liệu trong bộ nhớ - đĩa quá chậm (và ổ SSD). Nếu dữ liệu không phù hợp với bộ nhớ của một máy đơn lẻ, chúng tôi phải phân phối dữ liệu của chúng tôi đến nhiều nút hơn để tổng hợp đủ bộ nhớ.
Đối với kiên trì, sau đó chúng tôi phải ghi dữ liệu của mình vào đĩa. Giả sử tổ chức tối ưu điều này có thể được thực hiện dưới dạng hoạt động nền, không ảnh hưởng đến độ trễ. Tuy nhiên, đối với độ tin cậy (failover, HA hoặc bất cứ điều gì), hoạt động đĩa không thể hoàn toàn độc lập với các phương pháp truy cập: chúng ta phải đợi cho đĩa khi sửa đổi dữ liệu để làm cho hoạt động của chúng tôi sẽ không biến mất. Đồng thời cũng thêm một số độ phức tạp và độ trễ.
Mô hình dữ liệu không giới hạn ở đây: hầu hết các phương pháp hỗ trợ truy cập dựa trên khóa duy nhất.
Chúng tôi phải quyết định,
- nếu dữ liệu phù hợp trong bộ nhớ của một máy, hoặc chúng ta phải tìm ra giải pháp phân phối,
- nếu đồng thời là một vấn đề, hoặc không có hoạt động song song,
- nếu độ tin cậy là nghiêm ngặt, chúng tôi không thể sửa đổi nhỏ, hoặc chúng ta có thể sống với thực tế là một vụ tai nạn ngoài kế hoạch sẽ dẫn đến mất dữ liệu.
Giải pháp có thể là
- tự thực hiện cấu trúc dữ liệu sử dụng thư viện java tiêu chuẩn, các tập tin vv có thể không phải là giải pháp tốt nhất, vì độ tin cậy và độ trễ thấp yêu cầu triển khai thông minh và rất nhiều thử nghiệm,
- RDBMS s có mô hình dữ liệu linh hoạt, hoạt động bền, nguyên tử và bị cô lập, bộ nhớ đệm, v.v. - chúng thực sự biết quá nhiều và hầu như khó phân phối. Đó là lý do tại sao chúng quá chậm, nếu bạn không thể tắt các tính năng không mong muốn, thường là như vậy.
- NoSQL và cửa hàng khóa giá trị là các lựa chọn thay thế tốt. Những thuật ngữ này khá mơ hồ và bao gồm rất nhiều công cụ. Ví dụ:
- BerkeleyDB hoặc Kyoto Tủ dưới dạng các cửa hàng khóa-giá trị liên tục một máy (sử dụng B-trees): có thể được sử dụng nếu tập dữ liệu đủ nhỏ để vừa với bộ nhớ của một máy.
- Dự án Voldemort như một kho khóa giá trị phân phối: sử dụng phiên bản javaDB bên trong, đơn giản và phân phối,
- ScalienDB như một kho khóa giá trị phân phối: đáng tin cậy, nhưng không quá chậm để viết.
- MemcacheDB, Redis cơ sở dữ liệu bộ nhớ đệm khác với sự kiên trì,
- các hệ thống NoSQL phổ biến như Cassandra, CouchDB, HBase v.v. được sử dụng chủ yếu cho dữ liệu lớn.
Danh sách các công cụ NoSQL có thể được tìm thấy, ví dụ: here.
Voldemort's performance tests báo cáo thời gian đáp ứng mili giây, và chúng có thể đạt được khá dễ dàng, tuy nhiên chúng tôi cũng phải cẩn thận với phần cứng (như thuộc tính mạng được đề cập ở trên).
Bạn có ý nghĩa gì bởi "Cực kỳ nhanh"? –
Độ trễ dưới miligiây để lưu trữ và truy xuất – AAK
Tỷ lệ ghi của bạn để đọc là bao nhiêu? khi đọc, mẫu truy cập là gì (ngẫu nhiên, vón cục, ...)? bản chất của khóa duy nhất cho mỗi bản ghi (không quan trọng, uuid, dấu thời gian) là gì? – Ron