찾다

 >  Q&A  >  본문

node.js - nodejs单进程产生的数据库连接多线程并发问题探讨

举例,假设有100个请求node服务器,每个请求会执行一次查询,修改数据库操作。假设10个请求按顺序被node接收处理 等待各自判定库存查询数据库io操作,但是库存只有5个,问题来了,这时候10个查询都判定库存还有,然后继续下面的下单操作。当100个请求甚至更多时,问题会被更加放大 又不能同步加锁,哪位朋友有比较合理的思路 不吝赐教~

怪我咯怪我咯2872일 전960

모든 응답(4)나는 대답할 것이다

  • 高洛峰

    高洛峰2017-04-17 15:52:35

    사이트에서 "급매" 검색
    https://segmentfault.com/sear...

    극단적인 경우는 '플래시 세일'입니다
    https://segmentfault.com/sear...

    회신하다
    0
  • 大家讲道理

    大家讲道理2017-04-17 15:52:35

    이 경우 거래를 추가해야 합니다

    ----- 답변 업데이트 -----

    쿼리와 실제 데이터가 일치하지 않는 문제는 피할 수 없습니다. 콜백을 업데이트하기 전에 다른 사용자가 성공적으로 구매하면 구매 실패 문제가 발생할 수 있으므로 잠금으로 해결할 수 있습니다. 사실 모든 비동기 작업이 Promise를 사용하는 경우 Promise를 통해 순차 호출을 시뮬레이션하여 Java 메서드 잠금과 유사한 기능을 얻을 수 있습니다

    데코레이터를 사용하여 Promise를 반환하는 메서드에서 Java 동기화 키워드와 유사한 동기 호출을 구현합니다

    으아아아

    Chrome에서 실행할 때 통과되었습니다. .

    ----- 다시 업데이트 ----

    github에는 이미 유사한 도구가 있습니다
    https://github.com/sindresorh...

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-04-17 15:52:35

    위의 두 분에게 감사드립니다. 우선 제가 설명한 시나리오는 일반 상품 판매에 대한 것입니다. 급하게 구매하는 경우에는 Redis Queue를 사용하여 직접 해결하는 것이 더 쉽습니다. 제품 종류가 많은 경우에는 이 방법을 권장하지 않습니다.

    으아아아

    회신하다
    0
  • 阿神

    阿神2017-04-17 15:52:35

    거래 조건부 업데이트는 의도적으로 과매도를 방지합니다.

    회신하다
    0
  • 취소회신하다