2017-02-08 16 views
0

두 프로세스간에 메모리 내 데이터 구조를 동기화하는 방법은 무엇입니까? 두 프로세스 모두 동일한 프로세스 (서버)입니다. 하나는 활성 상태이고 다른 하나는 대기 상태입니다. 대기 상태는 크래쉬/액티비티와 유사한 경우에 인계 받아야합니다. 대기가 활성을 인계 받기 위해서는 메모리 내 데이터 구조를 동기화 상태로 유지해야합니다. Virtual Synchrony를 사용할 수 있습니까? 도움이 될까요? 내가 사용할 수있는 라이브러리가 있다면? Windows (Visual Studio)에서 C++로 코딩하고 있습니다.두 프로세스의 메모리 내 데이터 구조를 동기화 상태로 유지

이것이 해결책이 아니라면 제가 참조 할 수있는 좋은 해결책은 무엇입니까?

TIA

답변

1

구현하는 가장 쉬운 솔루션은 장애시, 대기 그냥 같은 데이터베이스를 계속 사용할 수 있도록, 별도의 데이터베이스 상태를 저장하는 것입니다. 데이터베이스가 손상되는 것에 대해 걱정이된다면 메인 데이터베이스와 스탠바이 데이터베이스를 보유하는 데 필요한 돈과 복잡성을 지불하고 데이터베이스도 장애 조치를 수행하십시오. 이것은 페일 오버를 통해 상태를 처리하는 복잡성을 데이터베이스로 밀어 넣으려는 시도입니다. 물론 데이터베이스 트랜잭션의 오버 헤드가 병목 현상이 될 수 있습니다. 이 경우 NoSQL을 사용하는 것이 바람직 할 수 있지만 기존 데이터베이스를 사용하는 ACID 보장에 의존하고 있다는 것을 기억하십시오. 이러한 문제를 해결하고 대체로 결과 일관성을 얻으려면 장애 조치에서 이것이 무엇을 의미하는지 생각해야합니다. 장애 극복에 대한 최근의 정보를 약간 잃어 버리시겠습니까? 너 신경 안써?

가상 동기화가 재미 있습니다. 필자는 비슷한 것을 찾았으며 http://www.cs.cornell.edu/ken/과 같은 학술적 페이지를 발견했다.이 중 일부는 연구 그룹이 만든 오픈 소스 소프트웨어에 대한 링크가있다. 나는 그들을 사용한 적이 없다. 나는 그들이 매우 좋은 연결성을 가진 적은 수의 기계들에 대해 꽤 잘 작동했다는보고를 기억하는 듯하지만, 규모에 따른 성능 문제를 겪었다. 나는 당신에게 문제가되지 않을 것이라고 생각한다.

사람들은 이전에 프로세스가 공유 메모리 또는 메모리 매핑 된 파일을 통해 통신하도록하여 유닉스 시스템에 다중 프로세스 시스템을 구축했습니다. 매우 간단한 데이터 구조의 경우, 이것이 가능하도록 만들어 질 수 있습니다. 하나의 문제는 공유 된 데이터를 수정하는 과정에서 프로세스 중 하나가 충돌하면 다른 프로세스가 엉망이되는 것입니까? 이러한 문제는 해결할 수 있지만 첫 번째 단락에서 설명한 데이터베이스 내부의 모든 것을 구현했음을 발견 할 위험이 있습니다.

0

memcached 또는 redis와 같은 메모리 데이터베이스를 사용할 수 있습니다.

+0

와우, 고마워! 어제 당신의 답장을 보았고 내가 redis에 대해 조사했습니다. 거대한 코드와 함께 사용하고 싶습니다. 아마도 500 개의 클래스와 다른 데이터 구조를 원할 것입니다. 그래서 redis와 소멸자/다른 setter 함수의 정보를 얻기 위해 해당 클래스의 생성자를 추가해야합니다. –