2013-05-26 1 views
1

mysql 테이블의 변경 사항에서 ETS 테이블을 업데이트해야합니다. mysql 테이블은 erlang 어플리케이션에서 액세스 할 수 있습니다.mysql 트리거를 통해 ETS 테이블을 업데이트하는 방법

mysql 테이블이 일종의 웹 앱에서 업데이트되는 동안 프로세스가 ETS 테이블을 업데이트하기 위해 기다릴 수 있다고 생각합니다.

모든 의견을 보내 주시면 더 이상의 정보를 제공해 드릴 수 있는지 알려 주시기 바랍니다.

감사합니다.

+0

사실, 당신은 두 개의 동기화를 유지하고 싶다면, 그 이벤트를 받기를 기다리고있는 쪽의 데몬을 가지고 있어야합니다. OTP 앱의 일부인 'gen_server'가 바람직하며, 다운되었을 경우 항상 다시 시작됩니다. –

+0

애플리케이션에서 동기화되지 않은 데이터 집합 (밀리 초 단위)은 얼마입니까? 대답이 많지 않거나 전혀 없다면, 일부 함수 'yourapp_insert()'내의 두 연산에 대한 간단한 인터페이스는 이물질없이 두 삽입을 모두 처리해야합니다. 반면에 시스템이 완전히 원자 적이어야한다면 자물쇠가 필요할 것입니다. 잠금 메커니즘은 시스템의 정확한 특성에 따라 달라지며 다소 까다로울 수 있습니다. 당신은 또한 썩어 짐을 피하기 위해 '트랜잭션 삽입'래퍼 (예외!)를 원할 것입니다. '삽입은 성공하지만 mysql은 실패합니다'. 건배 – smassey

+0

또한, 불행히도 mysql 트리거에서 erlang 프로세스를 호출 할 수 없을 것입니다. (바이너리 로그를 꼬리로 일할 수도 있지만 여전히 원자가 될 수는 없습니다) – smassey

답변

0

MySQL에는 알림 인프라가 없으므로 자동으로 수행 할 수 없으므로 폴링을 수행해야합니다. 마지막 업데이트 시간을 포함하는 한 행의 테이블을 만든 다음 관련 행이 변경 될 때이 테이블을 업데이트하는 트리거를 만들 수 있습니다. 그런 다음 계속이 테이블을 확인하여 변경되었는지 확인하십시오.

PostgreSQL으로 전환 할 수 있다면 LISTEN/NOTIFY commands입니다. epgsql 드라이버를 사용하면 이러한 통지를 수신하는 프로세스의 PID를 추가 할 수 있습니다.

관련 문제