Tôi đang thiết kế một hệ thống cần phân tích số lượng lớn các giao dịch người dùng và tạo ra các biện pháp tổng hợp (chẳng hạn như xu hướng và vv). Hệ thống sẽ hoạt động nhanh, mạnh mẽ và có thể mở rộng. Hệ thống dựa trên java (trên Linux).Thiết kế hệ thống xử lý phân tích thời gian thực
Dữ liệu đến từ hệ thống tạo tệp nhật ký (dựa trên CSV) của giao dịch người dùng. Hệ thống tạo tệp mỗi phút và mỗi tệp chứa giao dịch của những người dùng khác nhau (được sắp xếp theo thời gian), mỗi tệp có thể chứa hàng nghìn người dùng.
Một cấu trúc dữ liệu mẫu cho một tập tin CSV:
10: 30: 01, sử dụng 1 ...
10: 30: 01, sử dụng 1 ...
10:30:02 , người dùng 78, ...
10: 30: 02, người dùng 2, ...
10: 30: 03, người dùng 1, ...
10: 30: 04, người dùng 2, ...
. . .
Hệ thống tôi đang lập kế hoạch sẽ xử lý các tệp và thực hiện một số phân tích trong thời gian thực. Nó phải thu thập đầu vào, gửi nó đến một số thuật toán và các hệ thống khác và lưu trữ kết quả tính toán trong cơ sở dữ liệu. Cơ sở dữ liệu không chứa các bản ghi đầu vào thực tế mà chỉ phân tích tổng hợp cấp cao về các giao dịch. Ví dụ: xu hướng và v.v.
Thuật toán đầu tiên tôi định sử dụng yêu cầu hoạt động tốt nhất ít nhất 10 bản ghi người dùng, nếu không tìm được 10 bản ghi sau 5 phút, nên sử dụng dữ liệu sẵn có.
Tôi muốn sử dụng Storm để thực hiện, nhưng tôi muốn rời khỏi cuộc thảo luận này ở cấp thiết kế nhiều nhất có thể.
Một danh sách các thành phần hệ thống:
Một nhiệm vụ theo dõi các tập tin đến từng phút.
Tác vụ đọc tệp, phân tích cú pháp và cung cấp tệp cho các thành phần và thuật toán hệ thống khác.
Một thành phần để đệm 10 bản ghi cho người dùng (không quá 5 phút), khi 10 bản ghi được thu thập hoặc 5 phút trôi qua, đã đến lúc gửi dữ liệu đến thuật toán để xử lý tiếp. Do yêu cầu là cung cấp ít nhất 10 bản ghi cho thuật toán, tôi đã nghĩ đến việc sử dụng Nhóm trường Storm (nghĩa là cùng một nhiệm vụ được gọi cho cùng một người dùng) và theo dõi bộ sưu tập 10 hồ sơ của người dùng bên trong nhiệm vụ. lên kế hoạch để có một số nhiệm vụ này, mỗi nhiệm vụ xử lý một phần của người dùng.
Có các thành phần khác hoạt động trên một giao dịch duy nhất, vì chúng tôi dự định tạo các tác vụ khác nhận được mỗi giao dịch khi nó được phân tích cú pháp (song song với các tác vụ khác).
Tôi cần bạn trợ giúp # 3.
Thực tiễn tốt nhất để thiết kế thành phần như vậy là gì? Rõ ràng là nó cần duy trì dữ liệu cho 10 bản ghi cho mỗi người dùng. Bản đồ giá trị khóa có thể hữu ích, liệu bản đồ có được quản lý tốt hơn trong bản thân nhiệm vụ hoặc sử dụng bộ nhớ cache được phân phối hay không? Ví dụ Redis một cửa hàng giá trị khóa (Tôi chưa từng sử dụng nó trước đây).
Cảm ơn sự giúp đỡ của bạn