2012-04-19 2 views
2

잘 오브젝트는,이 주제를 찾고 있었어요하지만 그것을 찾을 수없는, 그래서 당신을 요청할 것입니다 :Node.js를 - 동시 쓰기와 읽기가

을 내가 쓰고에 배열에 읽을 필요 주파수와 서버, 그래서 나는 데이터베이스를 사용하지 않기로 결정했지만, 나는 모범 사례가 무엇인지 모르겠다? 그것은 많은 데이터가 될 것입니다, 자바 스크립트 배열 수 있을까? 논 블로킹 방식으로 읽고 쓸 수는 있지만 동시성 문제는 피할 수 있습니까?

온라인 멀티 플레이어 게임 인 MMORPG입니다. 데이터는 모든 플레이어가 온라인 상태입니다. 이 과정은 플레이어가하는 거의 모든 단계를 기록하고 그 후에 그것을 읽습니다. 나는 자식 프로세스, 또는 프로세스를보다 빠르고 비 블로킹 할 것을 생각하고 있었지만, 심지어 어떤 자식 프로세스가 HAHA 인지도 알고 있습니다! Node.js를 언제든지 코드는 기술적으로 다른 아무것도에서 프로세스를 차단하는 일을하고있다, 단일 스레드이기 때문에

답변

3

감사드립니다. 콜백을 기다리는 지점에 도달하면 Node는 콜백이 돌아올 때까지 다른 요청 처리를 시작합니다. 얼마나 많은 데이터가 '많이'입니까? 데이터로 무엇을해야합니까?

데이터에 많은 처리 작업을 수행하지 않고 많은 작업을 수행하는 경우 데이터베이스 솔루션이 좋지 않을 것입니다. 데이터베이스 용 노드 드라이버 (MongoDB, Redis 등)는 비동기 및 비 차단이므로 Node는 호출을 인터리빙하여 커다란 호출을 동시에 처리 할 수 ​​있습니다. 이와 같은 저장소를 사용하면 (메모리가 아닌) 노드 클러스터를 사용하여 요청에 응답하기 위해 여러 노드 프로세스를 스핀 업하여 여러 대의 컴퓨터를 사용할 수있을뿐만 아니라 한 대의 컴퓨터에서 둘 이상의 코어를 사용할 수 있습니다.

데이터 처리량이 많지 않고 데이터 세트가 매우 작고 노드 프로세스간에 데이터를 공유하는 데 신경 쓰지 않는다면 어떤 데이터 구조로든 메모리에 보관하십시오. 네가 원해. 배열, 사전 또는 LRU 캐시와 같은 것.

데이터에 많은 처리를하고 있고 그 중 많은 부분이있는 경우 노드가 최대 강도가 ​​아니기 때문에 작업을 조금 더 수행해야합니다 (처리가 하나의 스레드 만 차단합니다). 이는 추가 요청을 처리 할 수 ​​없음을 의미합니다). 처리를 처리하는 작업자 프로세스와 비 차단 대기열이있는 PubSub 모델과 같은 것을 제안합니다.

+0

내 질문에 도움을 주셔서 감사했습니다 – melanke

+0

글쎄, 많은 양의 처리가 아니라, 특정 데이터 포인트에 대해 읽고 쓰는 것이 아니라 큰 루프를 방지하는 데이터 구조를 생각하고 있습니다. 데이타를 빨리 얻을 필요가 있기 때문에 데이터베이스가 좋은 해결책이 될 것이라고 생각하십시오. – melanke

+0

Redis와 비슷한 것을 살펴보아야합니다. 메모리 저장소이므로 빠른 읽기 쓰기가 가능하지만 지속성 및 고 가용성 기능도 제공됩니다. 당신이 생각해 낼 수있는 어떤 데이터 구조보다 쿼리가 더 빠를 것입니다 (매우 최적화되었습니다). 특정 지역에있는 플레이어를 알고 있거나 통계를 집계하려는 경우 목록 및 세트 기능이 유용합니다. – Bill