개념

2011-10-07 5 views
0

나는 경쟁 조건이 무엇인지 알고 있지만 나는 아직도 완전하지 않습니다 이해 :개념

첫째, 나는 트랜잭션을 지원하지 않습니다 의 MyISAM 및가하는 이노을 알고있다.

사용자를 염두에두고 소셜 사이트를 만들고 있는데 사용자가 중복 된 키 업데이트로 프로필을 업데이트하기 때문에 경쟁 조건을 고려해야하는지 궁금하지만 경쟁 조건이 발생하는지 궁금합니다. 이 문제를 방지하는 코드를 어떻게 작성합니까?

누군가가 여러 사용자가있는 사이트에서 경쟁 조건의 개념을 설명해 주실 수 있습니까? COMMIT, ROLLBACK 등의 사용.

어디에서 사용합니까?

+0

경쟁 조건이 무엇이라고 생각합니까? 너가 그 용어를 오용하고있는 것 같아. 또한, MyISAM .. 엔진에 소셜 네트워킹 사이트를 구축하면 데이터가 조금 커지면 InnoDB보다 나 빠지게됩니다. 이것이 최고의 아이디어입니까? –

+0

이렇게 생각하면 http://en.wikipedia.org/wiki/Race_condition 전자 대신 코드에 적용하십시오 – ford

답변

0

첫째, myisam은 트랜잭션을 지원하지 않으며 innodb는 않습니다.

좋은 시작입니다. InnoDB를 사용하는 것이 좋습니다. 트랜잭션은 데이터베이스의 수정을 수행하여 일치하는 것입니다 (atomic). 또한 트랜잭션은 격리를 보장하므로 데이터베이스 사용자가 다른 사용자의 수정을 방해 할 수 없습니다.

Race conditions 멀티 스레딩이있을 때 발생할 수 있습니다. 예, 데이터베이스는 둘 이상의 스레드를 사용하지만 트랜잭션은 다른 사용자의 데이터베이스가 변경되기 전에 한 사용자의 데이터베이스 변경이 이루어 지도록 보장합니다. (예, 단순한 논리적 인 설명입니다.)

편집 추가 : 다른 스택 오버플로 질문에서 볼 수있는 특정 SQL 질문을 할 수 있지만 일반적으로 INSERT, UPDATE 후 가능한 빨리 COMMIT 할 것입니다. , 또는 DELETE SQL 문.

+0

다음과 같이 커밋하십시오. $ query = mysql_query ("SELECT $ fields FROM'users' WHERE'user_id '= ". $ _ SESSION [ 'user_id']); COMMIT; $ query_result = mysql_fetch_assoc ($ query); foreach ($ args $ field) { \t $ args [$ field] = $ query_result [$ field]; –

+0

@Emmanuel Izu Onuoha : 선택 후 COMMIT 할 필요가 없습니다. 얼마나 많은 INSERT, UPDATE 및/또는 DELETES가 트랜잭션을 완료하는 데 관계없이 트랜잭션이 완료된 후에 COMMIT합니다. –

+0

어리석은 질문을해서 죄송합니다.하지만 거래가 뭐라고 말하면 ... 사용자가 로그인하거나 등록하거나 자신의 프로필을 편집 할 때 트랜잭션이 아니기 때문에 ... 나는 사용자가있는 사이트를 구축하고 있습니다. 프로필을 가지고 주석을 쓰십시오 ... 그래서 어떻게해야합니까? 그리고 나는 로그인, 등록, 프로필 편집 및 코멘트 추가를위한 SQL 문장이있는 4 가지 다른 파일을 가지고 있습니다 ... 그래서 정직하게 개념은 아직 명확하지 않습니다 .. –