2014-09-08 3 views
1

자바 동적 웹 앱이 있습니다. 내 안드로이드 응용 프로그램에 대한 RESTful 웹 서비스를 노출하고 있습니다.웹 호스팅에서 멀티 프로세싱

DB 업데이트를 수행하는 서비스가 있습니다. 이제 공용 도메인에서 응용 프로그램을 호스팅하려고합니다. 웹 호스팅에서 병렬 처리가 어떻게 작동하는지 궁금합니다.

내 서비스 /updateDB은 데이터베이스를 업데이트합니다. 이제 동일한 서비스를 동시에 사용하는 두 명의 사용자가있는 경우 두 명의 사용자가 동시에 실행됩니다. 그 이유는 데이터에서 불일치가 발생하기 때문입니다. 모든 것이 정확히 어떻게 작동합니까?

내 코드에서 동기화를 처리해야합니까?

답변

2

왜 데이터베이스 종류를 사용하고 있습니까? 특정 데이터베이스 엔진에는 이미 데이터를 쓰는 다른 요청이 완료되기 전에 트랜잭션을 완료 할 수있는 메커니즘이 있습니다. 대부분의 웹 개발자는 응용 프로그램 서버 (websphere, weblogic)와 데이터베이스 (Mysql, Oracle)가 이러한 작업을 처리하므로 걱정할 필요가 없습니다.

웹 서비스에 대한 요청이 DB에 대해 하나 이상의 작업을 수행 할 수 있습니다. 이러한 작업은 함께 묶어서 트랜잭션이라고 할 수 있습니다. 트랜잭션은 다음 INSERT, UPDATE, DELETE 중 하나 이상을 포함 할 수 있습니다. 예 : 신규 고객이 웹 서비스에 등록합니다. 트랜잭션으로 간주 될 수있는 다음 조치가 발생합니다.

  1. 삽입 고객은 주소 테이블에 주소를 고객 테이블에 새 고객 사용자 이름 암호를 삽입

위의 모든 행동이 하나로 완료 할 수 있습니다 요약 테이블에 업데이트 전체 고객 수 트랜잭션. 이 중 하나라도 실패하면 모든 작업이 자동으로 되돌아갑니다. 마찬가지로 두 명의 고객이 동시에 등록하는 경우 데이터베이스는 서로를 작성하지 않도록주의를 기울입니다.

다른 트랜잭션이 데이터를 연속으로 더럽힐 수 있기 전에 모든 트랜잭션을 완료해야한다는 것을 확인하기 위해 데이터베이스를 구성 할 수 있습니다.

데이터베이스에서이를 ACID 속성이라고합니다.

  • - 원자력 - 트랜잭션의 모든 것이 실패하면 모든 트랜잭션이 완료되어야합니다. 그런 다음 트랜잭션을 완료하지 말고 해당 트랜잭션 내의 모든 이전 작업을 되돌립니다.
  • C - 일관성 - 발생하는 모든 트랜잭션이 항상 미리 정의 된 방식으로 데이터베이스를 업데이트하는지 확인하십시오. 예 : 모든 고객 등록 이후에 모든 조치가 실행 된 후에 확인하십시오.
  • I- 격리 - 하나 이상의 요청이 들어 오면 데이터베이스에서 개별적으로 실행됩니다.
  • D - Durabilty - 트랜잭션 완료 후 변경 사항은 영원히 유지되어야합니다.

예를 들어, InnoDB 엔진이있는 MySQL 데이터베이스가 이것을 지원합니다. 이것도 지원하는 다른 데이터베이스가 있습니다.

당신은이 데이터베이스에서 매우 광대 한 주제 여기 http://java.dzone.com/articles/beginners-guide-acid-and

더 읽을 수 있습니다.

프로그래밍 언어에는 이러한 방식으로 코드를 작성하는 데 도움이되는 APIS가 있습니다. 그러나 기본 취하기는 데이터베이스 및 응용 프로그램 서버가 대부분의 작업을 수행한다는 것입니다. 트랜잭션을 식별하고 적절하게 커밋하기 위해 코드 구조를 설계해야합니다.

Java 및 기타 프로그래밍 언어는 DB의 ACID 속성을 인식하고이를 달성하는 데 도움을줍니다.

위에서 언급 한 내용을 달성하기 위해 Java를 사용하는 방법에 대해 자세히 알아보십시오. http://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html

다른 언어들도 유사한 기능과 API를 가지고 있습니다. "java database transaction"에 대한 구글 검색에서

또는 "<your favorite language>database transaction"

+1

그래서 기본적으로 내 웹 응용 프로그램은 바람둥이에 배포 된 경우. 그리고 MySQL을 가지고 있다면, 두 사람이 같은 순간에 앱에 액세스한다면 (그리고 둘 다 데이터베이스에서 동일한 값을 변경한다고 가정하면) 걱정할 필요가 없습니다. – Kraken

+1

네가 맞습니다. 열기 및 닫기 연결, 연결 풀 등과 같은 데이터베이스 관련 기타주의 사항을 읽으십시오. 모두 중요하며 확장 가능한 강력한 응용 프로그램을 구축하는 데 도움이됩니다. –