다음과 같은 상황이 있습니다. 두 개의 similair java 응용 프로그램이 서로 다른 서버에서 실행되고 있습니다. 두 응용 프로그램은 제공된 웹 서비스를 사용하여 동일한 웹 사이트에서 데이터를 가져옵니다. 그러나 사이트에서는 첫 번째 앱이 두 번째 앱과 동일한 데이터 평화를 취했다는 사실을 알지 못합니다. 데이터를 가져온 후 데이터베이스에 저장해야합니다. 그래서 나는 같은 데이터를 데이터베이스에 두 번 저장하는 문제가있다.두 개의 Java 응용 프로그램을 어떻게 동기화 할 수 있습니까?
어떻게하면 데이터베이스에 중복 항목을 피할 수 있습니까?
1) 데이터베이스 측면을 사용하십시오. "유일한 경우 삽입"과 같은 것을 작성하십시오.
2) 서버 측을 사용하십시오. 두 개의 데이터 가져 오기 프로그램으로부터 응답을 받고 어떻게 든 처리 할 중간 서비스를 작성하십시오.
두 번째 해결 방법이 더 효과적이라고 생각합니다.
이 주제에 대해 조언을 해 줄 수 있습니까? 어떻게 그 중간 서비스를 구현하겠습니까? 서비스 간의 통신을 어떻게 구현합니까? 수신 된 데이터를 저장하기 위해 HashMaps를 사용한다면 우리 시스템이 처리 할 수있는 HashMap의 최대 크기를 어떻게 추정 할 수 있습니까?
Mairbek, 답장을 보내 주셔서 감사합니다. 이 방법의 문제점은 모든 응용 프로그램이 완전히 동일해야한다는 것입니다. 따라서 첫 번째 앱에는 가져 오는 코드를 넣을 수 없으며 두 번째 앱에는 배치하지 마십시오. 아니면 Apache Zookeeper가이 문제를 해결할 수 있다는 뜻입니까? 정말,이 문제를 해결하는 세 번째 방법이 될 수 있다고 가정합니다. 응용 프로그램 중 하나에서만 루틴을 가져 오는 서비스를 만듭니다. 즉, 내 앱이 가져 오기 작업을 수행 할 수있는 신호를 생성하는 무언가가 필요합니다. – KutaBeach
실행중인 코드가 동일해야합니다.그들 중 하나가 리더로서 행동해야만하는 분산 된 프로세스간에 합의가 필요합니다. 예를 들어 두 개의 동일한 서버가있는 경우 시작 시간에 둘 다 리더 중 하나를 결정해야합니다. 이것은 ZooKeeper를 사용하여 수행 할 수 있습니다. 첫 번째 서비스가 리더 인 경우 데이터를 가져 와서 두 번째 DB를 유휴 상태로 유지하고 그 반대의 경우도 마찬가지입니다. –
이것은 내가 뭔가를해야한다는 것을 의미합니다. 속성 파일을 변경하고, 응용 프로그램 코드를 변경하고, 일부 응용 프로그램 속성에서 코드를 작성합니다. 이렇게하면 내 응용 프로그램이 완전히 동일하지 않게됩니다. 또는 일부 외부 서비스를 사용하여 리더를 선택하도록 제안 하시겠습니까? – KutaBeach