이벤트 저장소 대몽고DB
MongoDb에서 직접 이벤트 소싱을 구현하는 것보다 EventStore(http://geteventstore.com )를 사용하는 것이 어떤 이점이 있는지 알고 싶습니다.
제가 질문하는 이유는 우리 회사에는 매일 MongoDb와 함께 일하는 많은 사람들이 있기 때문입니다.그러나 이벤트 소싱에서는 작동하지 않습니다.그들이 그 주제에 대해 완전히 알지는 못하지만, 그들은 또한 어디에서도 그것을 실행하기 시작하지는 않을 것입니다.
이벤트 소싱에 완벽하게 적합한 프로젝트를 시작하려고 합니다.매우 잘 정의된 이벤트는 약 16개이며, 잘 정의된 예측은 약 7개입니다.저는 일단 그들이 사용 중인 제품을 보게 되면 더 많은 예상과 이벤트에 대한 수요가 있을 것을 알기 때문에 "about"이라고 말합니다.
이 접근 방식은 먼저 API가 될 것이며, REST API는 조직의 다른 부분에서 사용될 것입니다.
Greg Young이 정의하는 방식으로 이벤트 소싱에 대해 많이 읽었지만 실제로 이벤트 소싱 솔루션을 구현한 적은 없습니다.
이것은 그린필드 프로젝트입니다.모든 것을 REST 인터페이스로 노출할 예정이므로 기술 제한이 없습니다.그래서 MongoDb와 함께 EvenStore 또는 Event Sourcing에서 일한 경험이 있는 사람이 있다면 알려주시기 바랍니다.
또한 이벤트 소싱에 대한 거의 관련이 없는 질문입니다.당신은 이벤트 스토어에 직접 문의한 적이 있습니까?또는 항상 새 투영 및 재생 이벤트를 생성하여 해당 투영을 채우시겠습니까?
고지 사항 저는 Greg Young입니다 (제 이름을 읽을 수 없는 경우 :)
이 질문은 어차피 삭제될 가능성이 높다고 생각하지만 답변을 드리겠습니다.이 질문 하나만으로도 좀 이상하지만, 답은 꽤 이상합니다.개별적으로 답변하는 데 시간을 들이지 않고 제 의견을 모두 이 답변에 넣겠습니다.
mono의 커스텀 버전에서만 실행된다는 코멘트가 있는데, 자세한 내용은...그렇지 않습니다(1년 이상 경과하지 않았습니다).모노로 만든 중요한 패치(예: 스레드풀.c가 마스터를 히트시키기 위해)를 기다리고 있었습니다.이런 일이 있었습니다.
EventStore는 3-clause BSD 라이센스를 받았습니다.어떻게 우리가 오픈 소스가 아니라고 주장할 수 있는지 잘 모르겠습니다.우리는 또한 그 뒤에 회사가 있고 상업적인 지원을 제공합니다.
어떤 분이 저희가 9월에 버전 3으로 넘어갈 거라고 말씀하셨어요.버전 1은 2년 전에 출시되었습니다.버전 2는 클러스터링을 추가했습니다(단일 노드에 비해 일부 변경 사항이 있음이 분명함).버전 3은 경쟁력 있는 소비자를 보유할 수 있는 능력을 포함하여 많은 것을 추가하고 있습니다.이 기간 동안 실제 클라이언트 프로토콜 측면에서 변경된 것은 거의 없습니다(특히 HTTP API를 사용하는 클라이언트 프로토콜의 경우)
하지만 추천서에서 제가 정말 불안한 것은 그들이 비교하는 것을 이해하지 못하는 것 같습니다.이것은 제가 "neo4j와 leveldb 중 어느 것을 사용해야 할까요?"라고 말하는 것과 거의 같습니다.레벨 db 위에 그래프 데이터베이스를 구축할 수 있지만, 이는 상당한 작업입니다.
이 경우 Mongo는 OP가 직접 작성해야 하는 이벤트 저장소의 스토리지 엔진이 됩니다.프로덕션 품질 이벤트 저장소를 작성하는 것은 가장 기본적인 작업이라도 원하는 경우 스토리지 엔진 위에서 간단한 작업이 아닙니다.
저는 이 질문에 해당하는 메일링 리스트에 대해 이렇게 썼습니다.
Mongo를 사용하여 다음 작업을 수행할 방법:
순서/최적 동시성 등을 사용하여 스트림 간에 이벤트 쓰기 및 읽기
그러면:
당신의 투영은 작성된 것과 같은 방식으로 스트림에서 읽기를 원하지 않으며, 투영은 일반적으로 이벤트 유형에 관심이 있으며 스트림이 적절하게 작성되거나 순서에 상관없이 T 유형의 모든 이벤트를 원합니다.
예를 들어, 푸시된 이벤트 알림에서 풀된 정보(예: 폴링) 처리로 라이브 전환 기능을 원할 수도 있습니다.
카프카, 데이토믹, 이벤트 스토어를 비교하는 것이 더 말이 될 것입니다.
다른 답변은 EventStore의 툴링이나 이점에 대해 언급하지 않고 MongoDB의 이점에 대해서만 언급합니다.하지만 제 경험은 제한적입니다.
그 범죄자들부터 시작하죠
- 체크인이 많아 적극적으로 지원할 버전을 결정할 수 있습니다.팀에서 릴리스를 확인하는 동안 출시된 지 18개월도 지나지 않아 버전 3에 도달했다는 것은 현재 지원 중인 버전을 다른 최신 버전으로 끌어올려야 한다는 것을 나타냅니다(이는 구현하기로 선택한 플랫폼에도 영향을 미칠 수 있음).
- 모든 플랫폼(특히 클라우드 환경 또는 도커 기반 lxc 컨테이너로 이동하려는 경우)에서 쉽게 작동하지 않습니다.이 중 일부는 Mongo와 같은 다른 DB를 둘러싼 커뮤니티 때문입니다.그러나 이 팀은 플랫폼 간 안정성을 유지하면서 읽기/쓰기 성능에 전력을 다하고 있는 것으로 보입니다.시간이 지남에 따라 오늘날의 매력적이지 않은 베어메탈 OS 구현에서 너무 멀리 벗어나고 싶지 않다는 것을 알게 되었습니다.
- 특수 버전의 Mono를 사용합니다.이전 버전의 Mono에 대한 지원을 찾는 것은 프로세스를 보다 근본적으로 만드는 역할을 할 뿐입니다.
- EventStore의 성능을 최대한 활용하려면 아키텍처에 대해 정말로 생각해야 합니다.EventStore는 플랫 파일로 출력하고 이벤트 데이터는 매우 빠르게 증가할 수 있습니다.데이터를 유지하려는 디스크의 오류율은 얼마입니까?어떻게 압축됩니까?보관하시겠습니까?제어 능력이 뛰어나며 데이터를 이벤트로 저장할 수 있습니다.하지만 Greg Young 자신이 장기적으로 디스크를 최적화하고 저장하는 기능을 제 무덤에 인용할 수 있다고 확신하지만, 비슷한 사례를 경험한 성숙한 Mongo 커뮤니티를 찾을 가능성이 높습니다.
그리고 장점은...
- RESTful - AtomPub입니다.스트림이 충분히 구체적이지 않습니까?다른 것을 만들고 당신의 마음이 만족할 때까지 http gets를 하세요.라우팅이 걱정되는 경우 http forward를 수행합니다.보안을 우려하여 http 프록시를 앞에 두었습니다.간단!
- 이벤트가 새로운 데이터를 생성하기 시작할 때 예상치를 테스트하고 구축할 수 있는 훌륭한 도구와 UI가 있습니다(예:크롬 브라우저를 사용하여 당신의 프로젝션을 디버깅합니다.ya 그들은 자바 스크립트로 작성되었습니다)
- 성능 읽기 - 응용 프로그램이 플랫 파일로 출력하기 때문에 커널 수준 캐싱을 얻고 http를 통해 즉시 노출할 수 있습니다.또한 대용량 데이터 세트에 대한 투영을 쿼리하기 위해 스트림 전체에 인덱스가 있습니다(하지만 인덱스 성능이 시간이 지남에 따라 서서히 향상될 것이라는 느낌이 듭니다).
저는 개인적으로 이것을 핵심/미션 크리티컬/또는 증가하는 애플리케이션에 사용하지 않을 것입니다!하지만, 만약 당신이 당신의 사건이 일어난 환경을 흥미롭게 유지하기 위한 부수적인 사례가 있다면, 나는 그것을 포기할 것입니다!저는 개인적으로 Mongo를 고수해야 합니다.
언급URL : https://stackoverflow.com/questions/19467084/eventstore-vs-mongodb
'programing' 카테고리의 다른 글
WSDL URL을 내부 시스템 이름에서 공용으로 변경하는 방법은 무엇입니까? (0) | 2023.06.04 |
---|---|
getContext(), getApplicationContext(), getBaseContext() 및 "이것"의 차이 (0) | 2023.06.04 |
NULL 열에 고유 인덱스를 만드는 방법은 무엇입니까? (0) | 2023.06.04 |
고유한 Android 장치 ID가 있습니까? (0) | 2023.06.04 |
ViewPager 및 fragments - fragment의 상태를 저장하는 올바른 방법은 무엇입니까? (0) | 2023.06.04 |