2016-11-08 1 views
0

나는 꽤 오랫동안 PHP 응용 프로그램을 개발해 왔습니다. (기본) 아이디어는 다음과 같습니다. 사용자는 블록을 사용하여 웹 페이지를 작성할 수 있습니다. 이 블록에는 이미지, 텍스트 등이 포함될 수 있습니다.이 블록들 각각에는 고유 한 옵션이 있습니다. 이러한 블록은 PHP를 통한 도메인 기반 디자인에 정의되어 있습니다.PHP : 최선의 방법은 앞으로 [serialization, objects, Redis]

jQuery/Javascript 프런트의 요청을 처리하는 PHP 기반 컨트롤러를 사용하도록 애플리케이션을 빌드했습니다. 사용자가 옵션을 편집 할 때마다 Redis 및/또는 php-session에서 블록 (php-objects)의 컬렉션을 unserialises하고 편집되거나 추가/제거되는 블록의 속성을 설정하는이 컨트롤러로 보내집니다. 블록. 이것은 도메인 논리를 시행하는 것입니다.

내 자신을 위해 발전한 것은 괜찮 았습니다. 나는 경쟁 조건 등을 결코 염두에 두지 않았습니다. 제품으로 전진하면서 사람들이 데이터를 잃어 버렸음을 알았습니다. 나는 어떻게되는지 설명 할 것이다.

  1. 사용자는
  2. 자신의 UUID
  3. 을 기반으로 수집 및
  4. 세트 블록을 unserialises,
  5. 눌러
  6. 요청이있는 컨트롤러로 구성되어 저장 블록의 옵션을 편집 컬렉션에 블록을 다시 넣고
  7. 은 컬렉션을 다시 serialize합니다.

2 개의 동시 요청이 생성되어 두 요청 중 1 개를 수정하는 시나리오가 있습니다.

나는이 응용 프로그램 부분을 다시 작성해야한다는 것을 알고 있습니다. 문제는 최선의 접근 방법입니다. 나는 할 수 있었다.

  1. 응용 프로그램의 전체 부분을 다시 작성해야하기 때문에 많은 작업이 필요한 자바 스크립트 라이브러리를 구현하십시오. 또한 자바 기반 솔루션을 구현하는 데 많은 경험이 없습니다. 그러나 나는 새로운 것을 밟을 수는 없습니다. 자바 스크립트 테스트를 통해 미래의 문제가 발생하지 않도록하고 크로스 브라우저 테스트를 활성화합니다.
  2. 컨트롤러가 단일 요청을 처리하고 동시 요청이 이전 요청의 데이터 세트를 덮어 쓰지 못하도록하는 Redis/Session locking을 적용합니다. 이렇게하면 동시 요청 및 데이터 손실 가능성은 낮아 지지만 완전히 저하되지는 않습니다. 실제 인터넷 연결 속도가 느린 사용자는 동시 요청이 많을 때 연결이 끊어 질 수 있습니다.

나는 다른 접근법이 무엇인지, 또는 내가 위에서 언급 한 두 가지 중 하나가 충분할지 궁금하다.

+0

많은 좋은 질문은 전문가 경험을 토대로 어느 정도의 의견을 제시하지만이 질문에 대한 답변은 사실, 참고 문헌 또는 특정 전문 지식보다는 의견을 기반으로하는 경향이 있습니다. 일반적으로 문제를 해결하기위한 개발 포럼 (예 : [quora] (http://www.quora.com/Computer-Programming))을 찾고 싶을 수 있습니다. 그런 다음/특정 코딩 문제가있는 경우 StackOverflow로 돌아와서 도와 드리겠습니다. –

답변

1

귀하의 문제를 이해하는 한 구현하고자하는 것은 optimistic locking입니다.

간단한 구현 방법은 집계를 버전 변환하는 것입니다.

누군가 다른 사람이 개체를 편집 할 때마다 버전이 증가합니다.

편집 한 블록이 POST 인 경우 변경 사항을 적용하려는 버전을 다시 보냅니다.

그런 다음 영구 저장 장치에서 개체를 가져올 때 버전을 비교하고 실제로 최신 개체로 작업하고 있는지 확인하십시오.

수정되지 않았 으면 저장하고 수정 사항을 거부하고 사용자에게 알린 다음 개체를 다시로드하고 적절한 조치를 취합니다 (필요에 따라 다름).

+0

Boris, 내 의견에 감사 드리며 늦은 답변을 드려 죄송합니다. 이걸 최대한 빨리 살펴볼 것입니다! 이것은 빠른 해결/해결 될 것입니다. 이 핸들러, 블록 및 전체 메커니즘의 자바 스크립트 버전을 빌드하는 것이 가장 좋습니다. –