2014-12-04 31 views
0

我有一個場景,我無法弄清楚正確處理的最佳方式。我有一個包含許多表格的mysql數據庫,用於存儲全球許多設備的配置信息。有一個腳本會頻繁運行,以查找更改,跟蹤狀態以及與這些設備相關的各種其他事情。處理不斷更新的mysql表的最佳方法

該數據驅動用於管理所述設備的前端應用程序。我的問題是我如何正確處理更新數據庫的時間。所以目前我將所有的數據寫入臨時表,然後在活動表中截斷/選擇*。

我知道這是非常可怕的,它會導致很多不同的問題,這是一個真正的痛苦。我確信必須有更好的方法,但我無法找到一個。任何人都可以提出一些更有效率的建議。這些表格相對較小,所以我可以通過上述方法脫身。 (每桌不到2k行)

如果我能弄清楚如何只更新已經改變的東西和任何新東西,那將是一件好事。我只是不知道如何擺動那一個。任何建議將不勝感激。

MySQL版本:MySQL的 14.14版DISTRIB 67年5月1日 的MyISAM(?大概也不應使用這個......)

有沒有一些方法,我可以嘗試使用這些方針時間戳或東西...

更新: 我沒有提供足夠的數據在這裏,所以我的錯。讓我試着給出一些更好的細節。

我有一個簡單的表,用於存儲領域,如:(大大簡化了這裏)

主機名,IP,狀態,政策,區位。

我有一個腳本每隔10分鐘運行一次,以捕獲所有這些以及更多內容以便轉儲到mysql中。問題是,當我截斷有時用戶可能正在嘗試使用前端應用程序,並且表尚未填充。我正試圖想出一個更好的方法來處理這個問題。

+0

這裏有這麼一點點的信息,它不清楚你問什麼。請分享一些代碼,架構和數據示例。 – sjagr 2014-12-04 18:34:26

+0

我正在尋找一個關於如何處理更新表的建議,當數據可能沒有改變,但同時插入新的數據。因此,不要找人給我代碼示例,更多的只是一個想法....爲了簡單起見,讓我嘗試以此爲例。我有一個表存儲狀態,IP,主機名和策略字段。領域政策或國家可隨時更改,需要在變更時處理。 – user1499 2014-12-04 18:38:12

+0

這似乎不是一個SQL/mySQL問題,實際上也沒有任何特定於PHP的東西。問題似乎是關於前端應用程序知道應用哪些更改。如果知道的話,它可以在主表上執行適當的'INSERT'和'UPDATE'語句。在'UPDATE'的情況下,只更新所有非PK列是可以的。 – 2014-12-04 18:38:19

回答

0

兩件事:MyISAM可能不是您桌子上最好的選擇。寫入MyIASM會鎖定整個表格。像InnoDB這樣的引擎將允許行級鎖定,因此在UPDATES和INSERTS期間只有受到影響的行纔會被鎖定。當然切換到這可能不是直接的。 MyIASM有其用途。它的快速,低開銷,通常非常適合數據倉庫。

接下來看看使用消息總線,即RabbitMQ。這些緩衝區充當大型數據流的緩衝區,您可以批量導入數據庫,而不是實時導入數據庫。隨着您的應用程序擴展,這些東西將變得越來越必要。

+0

啊,那是完美的謝謝!所以我已經做了一個更新,這個更新將會被更新/插入,而不是截斷。然而,仍然有一些信息緩衝區看起來像是可以做到的。謝謝!! – user1499 2014-12-04 19:41:43