많은 수의 사용자 트랜잭션을 분석하고 집계 된 측정 값 (예 : 추세 등)을 생성해야하는 시스템을 설계하고 있습니다. 시스템은 빠르고 견고하고 확장 성이 있어야합니다. 시스템은 Java 기반 (Linux)입니다.실시간 분석 처리 시스템 설계
사용자 트랜잭션의 로그 파일 (CSV 기반)을 생성하는 시스템에서 데이터가 도착합니다. 시스템은 매분마다 파일을 생성하고 각 파일에는 다른 사용자의 트랜잭션 (시간순으로 정렬 됨)이 포함되어 있으며 각 파일에는 수천 명의 사용자가있을 수 있습니다.
CSV 파일의 샘플 데이터 구조 :
10 : 30 : 01, 사용자 1, ...
10 : 30 : 01, 사용자 1, ...
10시 30분 2초 사용자 (78), ...
10 : 30 : 02, 사용자 2, ...
10 : 30 : 03, 사용자 1, ...
10 : 30 : 04, 사용자 2, ...
. . .
내가 계획하고있는 시스템은 파일을 처리하고 실시간으로 몇 가지 분석을 수행해야합니다. 입력을 수집하고 여러 알고리즘 및 다른 시스템으로 보내고 계산 된 결과를 데이터베이스에 저장해야합니다. 데이터베이스에는 실제 입력 레코드가 들어 있지 않지만 트랜잭션에 대한 상위 수준의 집계 된 분석 만 포함됩니다. 예를 들어 추세 등
내가 사용하려고하는 첫 번째 알고리즘은 최소 10 개의 사용자 레코드를 필요로하며, 5 분 후에 10 개의 레코드를 찾을 수 없다면 사용할 수있는 데이터를 사용해야합니다.
구현을 위해 Storm을 사용하고 싶지만이 토론을 가능한 한 디자인 수준에 두는 것을 선호합니다.
시스템 구성 요소의 목록 : 입력 파일 분마다 모니터링
작업입니다.
파일을 읽고 구문 분석하여 다른 시스템 구성 요소 및 알고리즘에서 사용할 수 있도록하는 작업입니다.
10 개의 레코드가 수집되거나 5 분이 경과 한 경우 추가 처리를 위해 알고리즘에 데이터를 보낼 시간입니다. 요구 사항은 알고리즘에 대해 최소 10 개의 레코드를 제공하는 것이므로 Storm Field Grouping (동일한 작업이 동일한 사용자에게 호출됨을 의미)을 사용하고 작업 내 10 개의 사용자 레코드 컬렉션을 추적합니다. 물론 이러한 작업 중 몇 가지를 계획하고 각각은 사용자의 일부를 처리합니다.
단일 트랜잭션에서 작동하는 다른 구성 요소가 있습니다. 다른 트랜잭션과 병행하여 구문 분석 될 때 각 트랜잭션을 수신하는 다른 작업을 생성 할 계획입니다.
# 3으로 귀하의 도움이 필요합니다.
이러한 구성 요소를 설계하는 가장 좋은 방법은 무엇입니까? 사용자 당 10 개의 레코드에 대한 데이터를 유지해야한다는 것은 분명합니다. 키 값지도가 도움이 될 수 있습니다.지도 자체를 작업 자체 또는 분산 캐시를 사용하여 관리하는 것이 더 좋습니까? 예를 들어 키 값 저장소를 Redis (이전에는 사용하지 않았습니다).
도움 주셔서 감사합니다.