2013-05-26 32 views
1

我需要從對mysql表進行的更改中更新ETS表:mysql表可從erlang應用程序中訪問。如何通過mysql觸發器更新ETS表

我在想,也許我可以有一個進程等待更新ETS表,而MySQL表從某種Web應用程序更新。

任何和所有的輸入讚賞,請讓我知道,如果我可以提供任何更多的信息。

謝謝。

+0

true,你想保持兩個同步,你應該有一個erlang端守護進程等待接收這些事件。它應該最好是一個'gen_server',它是OTP應用程序的一部分,這樣它在發生故障時總能重新啓動。 –

+0

應用程序中的數據集不同步的成本是多少(以毫秒爲單位)?如果答案不是很多,或者根本沒有答案,那麼通過某個函數'yourapp_insert()'中的兩個操作的簡單接口應該可以處理兩個插入操作,而無需任何特殊的操作。另一方面,如果系統必須是完全原子的,那麼你需要鎖定。鎖定機制將取決於系統的確切性質,並且可能會更棘手。你可能還需要某種「事務」包裝(例外!)來避免損壞,'插入成功但mysql失敗'。歡呼 – smassey

+0

不幸的是,你不能從一個mysql觸發器調用一個erlang進程..(拖尾二進制日誌可以工作,但仍然不是原子的) – smassey

回答

0

MySQL沒有通知基礎設施,所以你不能自動執行它,你必須通過輪詢來完成。您可以創建一個包含上次更新時間的行的表格,然後創建觸發器,以便在相關行更改時更新此表格。然後不斷檢查這張表,看看它是否改變。

如果您可以切換到PostgreSQL,它有LISTEN/NOTIFY commands。使用epgsql驅動程序,您可以添加將收到這些通知的進程的PID。