사용자 강좌 예약을 위한 프로젝트가 있는데, 이를 위한 노드가 있기 때문에 mongodb가 좋은 선택입니다. 하지만 강좌 예약 시스템은 사용자가 예약을 성공하거나 취소한 후에 강좌 예약 정보를 트랜잭션하기 때문입니다. 예약 운영, mongo에 대한 이해는 트랜잭션 시나리오에 사용하기에 적합하지 않다는 것입니다. 데이터베이스 설계에 대해서는 잘 모릅니다. 강좌 예약과 같은 프로젝트에 적합한지 묻고 싶습니다.
给我你的怀抱2017-05-02 09:27:40
MongoDB는 강력한 트랜잭션 시나리오에는 적합하지 않지만 많은 시나리오에서는 강력한 트랜잭션이 필요하지 않은 경우가 많으며 최종 일관성으로 대체할 수 있습니다. 강력한 트랜잭션을 피하기 위해 데이터 모델 설정 기술을 통해 많은 강력한 트랜잭션을 MongoDB 문서 원자성으로 변환할 수도 있습니다. 어떤 상황을 말하는 것인지 좀 더 명확하게 설명해야 피할 수 있는지 판단할 수 있습니다.
내가 이해하는 강좌 예약 시나리오의 경우 MongoDB가 필요한 강력한 시나리오는 아니지만 RDBMS가 필요한 시나리오는 아닙니다. 따라서 MongoDB가 사용하기에 적합한지 말하기 위해서는 구체적인 상황을 자세히 분석하는 것이 좋습니다.
=== 2017.4.9 업데이트 ===
댓글 업데이트에 따라 다음과 같은 추가 설명이 이루어졌습니다.
인원 제한 요구 사항은 MongoDB의 문서 원자성을 사용하여 해결할 수 있습니다. . 내가 등록 시나리오를 이해하는 한, 그것은 누가 어떤 강좌에 등록했는지, 총 몇 명이 등록했는지 기록하고, 등록 제한을 초과하지 않도록 관리하는 것에 지나지 않습니다. 그러면 강좌의 데이터 구조는 다음과 같이 설계될 수 있습니다.
이 강좌는 누군가 등록하면 업데이트될 수 있습니다.
으아악즉, 해당 강좌를 강좌 ID로 검색해 주세요. 신청자가 지정된 인원보다 적을 경우 신규 신청자가 추가되며, 그렇지 않은 경우에는 변경되지 않습니다. 그렇다면 등록이 성공했는지 어떻게 판단할 수 있을까요? findAndModify
기본적으로 수정 전 문서가 반환됩니다. (수정 후 문서도 반환 가능) 그래서:
findAndModify
의 사용법은 db.collection.findAndModify()를 참고하세요. MongoDB의 문서 수정은 원자적이므로 update
도 위 작업을 잘 완료할 수 있다는 것을 찾는 것이 어렵지 않습니다. update
과 findAndUpdate
의 비교는 업데이트 방법 비교