2016-05-31 3 views
0

내가 작업중인 프로젝트는 여러 개의 "회의실"에 배포됩니다. 각 방에는 node.js의 인스턴스를 실행하는 자체 서버가 있으며 각 방에는 일정 형태의 데이터 저장소가 있습니다. (데이터베이스 맛은 아직 결정되지 않았다).node.js/DB 구조에 대한 조언이 필요합니다.

각 방은 완전히 독립적으로 작동 할 수 있어야합니다. 따라서 5 개의 방이 있고 4 개의 방이 닫히면 마지막 하나는 다른 방을 사용하지 않고 계속 작동 할 수 있어야합니다. 지금까지 아무런 문제가 없습니다 ...

까다로운 부분은 객실 사이에 공유 된 데이터가 있다는 것입니다. 예를 들어 사용자 계정. 따라서 한 방이 사용자를 추가하면 해당 사용자는 모든 방에 로그인 할 수 있어야합니다.
다른 방 중 하나가 필요하면 해당 데이터를 다시로드 할 수 있도록 node.js 인스턴스에서 알림을받을 수 있다면 좋을 것입니다. ...

나는 계속보고 있습니다. MongoDB 복제본 세트를 제공하지만 이것이 내 문제에 대한 최상의 솔루션이라고 확신하지는 않습니다.

또한 각 방이 DB를 담당하고 다른 node.js 인스턴스가 새 사용자를 알리는 이벤트를 브로드 캐스팅 할 때 솔루션을 업데이트하려고합니다. 문제는 방이 하루 동안 오프라인 상태이면 다운 타임 동안 변경된 사항을 따라 잡을 수 없다는 것입니다.

엄청난 양의 데이터를 여기에서 보지 않으려 고합니다 ... 정확한 DB 지식을 가진 사람이라면 올바른 방향으로 나를 가리킬 수 있습니까?

답변

1

모든 객실에 자체 데이터베이스가있을 필요는 없습니다.

당신이하려는 것은 SQL/NoSQL이 될 수있는 하나의 중앙 데이터베이스를 갖는 것입니다. 이 중앙 데이터베이스는 신뢰성, 가용성, 데이터 샤딩,로드 밸런싱 및 단일 시스템 대신 데이터베이스 클러스터를 갖는 많은 다른 이점을 위해 여러 시스템에 클러스터링 할 수 있습니다. 이를 수행 할 수있는 방법은 데이터베이스 시스템마다 다릅니다. 거기에 많이있어 : mysql, redis, postgresql 및 많은 다른 사람. 당신은 그것들을 볼 수 있습니다.

모든 노드 인스턴스는 해당 중앙 데이터베이스에서 쓰고 읽습니다. 새로운 사용자가 추가 될 때 인스턴스가 서로 통보하고 자신의 로컬 데이터베이스를 업데이트 할 필요가 없습니다. 이것은 전혀 필요하지 않습니다. 이 경우 노드가 하루 동안 오프라인 상태 인 경우에도 다시 온라인 상태가되면 중앙 데이터베이스에서 모든 새 데이터에 액세스 할 수 있습니다. 이것은 당신이 따라야하는 디자인입니다.

데이터베이스 인스턴스가 여러 개있는 경우, 각 회의실 및 서버 수준에서 조정 계층을 구현하는 것은 총 NO입니다. 이 조정은 데이터베이스 계층에서 수행되어야하며 모든 서버 인스턴스는 데이터베이스에 연결하여 차례로 일관성 있고 업데이트 할 수 있어야합니다.

이 답변을 통해 도움이되기를 바랍니다.

관련 문제