나는 약 진짜 돈을 거래node.js와 noSQL db를 사용하여 트랜잭션 처리를 수행 할 수 있습니까?
내가 맡은 프로젝트를 이야기하고 있지 않다 것은 플레이어가 서로 사이에 물건을 무역 게임이다. 그것은 기본적으로 거래 프로세스입니다. 플레이어 A는 30 마리의 암소와 교환하여 플레이어 B 10 그루트를줍니다. 당신은 아이디어를 얻습니다.
하지만 대화 형이고 여러 플레이어가 한꺼번에 채팅 룸과 같은 환경에서 무작위로 거래하는 경우 node.js
과 같은 일을 할 수 있는지 궁금해했지만 문제가 있습니다.
데이터베이스 상태를 유지하기 위해 처리 트랜잭션과 rollback
및 commit
의 성격이 필요한 DB 배경에서 왔습니다. 그러나 우리가 node.js
더하기 mongoDB
(또는 그 문제에 대한 다른 noSQL DB)을 말하고 있다면 분명히 전체적인 사고 방식이지만, 단지 두 당사자 만 참여해야한다는 의미에서 거래를 처리하는 방법을 알지 못합니다. 어떤 형태의 잠금에 의지하지 않고, 확실하게 그것은 node
이 아닌 것입니다.
아직 아무 것도 발견하지 못했지만, node.js
은 너무 새롭기 때문에 저를 놀라게하지 않습니다.
업데이트 나는 거래의 메커니즘, 특히 뱅킹 스타일 트랜잭션을 알고 있지만, 이것은 똑같은 것이 아닙니다. 나는 그것을 명확하게하지 않았지만, 문제는 플레이어 B가 구매자 공동체에 무언가를 팔고 있다는 것입니다.
즉, 플레이어 A가 클라이언트 측에서 구매 지시를 시작하더라도 플레이어 C D 또는 E가 같은 암소를 구매할 때 거의 동시에 클릭 할 수도 있습니다.
이제 정상적인 거래에서 기록 수준 테이블 잠금을 얻은 사람 중 적어도 첫 번째 사람이 다른 사람이 그 시점에서 진행하는 것을 차단할 것으로 예상됩니다.
그러나 노드 사용의 특성과 특히 속도, 동시 처리 및 실시간 업데이트 데이터베이스 표시에 사용하면 가장 느린 사람 (우리가 말하는 밀리 초)이 쉽게 상상할 수 있습니다.
예를 들어 플레이어 A가 플레이어 C와 동시에 구매를 시작합니다. 플레이어 트랜잭션이 완료되고 Groats가 플레이어 B에게 지급되고 암소가 데이터베이스의 플레이어 A에 할당됩니다. 몇 초 후에 암소가 플레이어 C에게 할당됩니다.
나는이 문제를 더 잘 설명하기를 바랍니다.
질문을 게시 한 이후로이 주제에 대한 지식이 거의 없기 때문에 프로젝트를 진행하기 위해 다른 트랙을 얻었지만 재미있을 수 있습니다. – T9b
어쨌든, 어젯밤에 물줄기의 첫 번째 릴리스를 확인하고 싶습니다. http://github.com/mikermcneil/waterline dirtydb, 메모리 내장 데이터베이스를 사용하도록 설정되었습니다. . 내 다음 단계는 mongodb 어댑터를 작성한 다음 mySQL (mySQL 어댑터는 mySQL의 내장 트랜잭션을 사용합니다) – mikermcneil