Hệ thống của chúng tôi có mô hình có cấu trúc (khoảng 30 thực thể khác nhau với một số loại quan hệ) được lưu giữ hoàn toàn trong bộ nhớ (khoảng 10 Gb) vì lý do hiệu suất. Theo mô hình này, chúng tôi phải làm 3 loại hoạt động:Nên sử dụng Disruptor (LMAX) với mô hình lớn trong bộ nhớ và CQRS?
- cập nhật một hoặc một vài đơn vị
- truy vấn cho một dữ liệu cụ thể (điều này thường đòi hỏi phải đọc hàng ngàn đơn vị)
- có được số liệu thống kê (dung lượng bộ nhớ được sử dụng, số lượng truy vấn cho loại, v.v.)
Hiện tại kiến trúc là một tiêu chuẩn khá, với một nhóm chủ đề cho các servlet sử dụng mô hình được chia sẻ. Bên trong mô hình có rất nhiều bộ sưu tập đồng thời, nhưng vẫn còn nhiều chờ đợi vì một số thực thể là "nóng" hơn và chủ yếu là các chủ đề muốn đọc/ghi chúng. Cũng lưu ý rằng các truy vấn thường có nhiều cpu và tốn thời gian hơn viết.
Tôi đang nghiên cứu khả năng chuyển sang kiến trúc Disruptor giữ mô hình trong một chuỗi đơn lẻ, di chuyển mọi thứ có thể (kiểm tra tính hợp lệ, kiểm tra, v.v.) ra khỏi mô hình trong một người tiêu dùng riêng biệt.
Câu hỏi đầu tiên tất nhiên là: nó có hợp lý không?
Câu hỏi thứ hai là: các yêu cầu viết lý tưởng nên được ưu tiên hơn các lượt đọc. Đó là cách tốt nhất để có một ưu tiên trong disruptor? Tôi đã suy nghĩ về 2 vòng đệm và sau đó cố gắng để đọc từ một trong những cao hơn một thường xuyên hơn từ một ưu tiên thấp.
Để làm rõ câu hỏi có nhiều kiến trúc hơn về mã thực tế của LMAX Disruptor.
Cập nhật với các chi tiết
dữ liệu là một lĩnh vực phức tạp, với nhiều thực thể (> 100k) của nhiều loại khác nhau (~ 20) liên kết giữa chúng trong một cấu trúc cây với nhiều bộ sưu tập khác nhau.
Truy vấn thường liên quan đến việc vượt qua hàng nghìn thực thể để tìm dữ liệu chính xác. Cập nhật thường xuyên nhưng khá hạn chế như 10 thực thể tại thời điểm, vì vậy trong toàn bộ dữ liệu không thay đổi nhiều (như 20% cho giờ).
Tôi đã thực hiện một số bài kiểm tra sơ bộ và nó xuất hiện những ưu điểm về tốc độ truy vấn mô hình song song vượt quá thời gian trễ khóa ghi thường xuyên.
Xin chào Uberto - Bạn có thể thêm một số chi tiết không. Bạn đang chạy loại truy vấn nào? Và cập nhật các thực thể đang xảy ra trên cùng một vài thực thể hoặc trên nhiều thực thể khác nhau? Các thực thể được liên kết với nhau hay chủ yếu là độc lập và chúng có liên quan như thế nào? – jasonk
Về câu hỏi 2: precendance của đọc qua viết, Lmax tự nhiên là thích hợp cho tìm nguồn cung ứng sự kiện, trong đó nói rằng bạn giữ các sự kiện không phải là những mô hình, mô hình hiện tại của bạn (hoặc người được tối ưu hóa hơn là siêu nhanh về hoạt động đọc) vẫn sẽ có mặt ở đó nhưng bạn không bao giờ thay đổi mà thậm chí đã xảy ra khi nào, nếu bạn có một hoạt động đọc trước khi ghi, bạn nên xử lý nó theo thứ tự bạn nhận được nó, để có tình trạng tương tự reproducable nếu bạn phát lại chuỗi sự kiện ... Vì vậy, trong trường hợp này tôi ưu tiên này là sai ở đây, bạn làm điều đó khi hai luồng viết trong bộ sưu tập có lẽ ... – vach