2010-11-02 32 views
0

的memcached我有一個涉及通過一個Java應用程序記錄每1-2mins高達8000臺設備的狀態,並存儲設備ID,時間,並在表中狀態數據庫的應用程序。用Java和PHP應用

該應用程序的下一個組件是一個PHP界面,顯示這些設備的最新狀態(分配給用戶登錄的設備,最多可以有500個併發用戶,即每個設備可以查看16個設備,但超過50-100個用戶的平均負載)。該應用程序還將打印關於設備一段時間的狀態的報告。

我正在考慮使用Java應用程序中存儲最近的每個設備ID狀態,然後具有PHP應用程序只是訪問分佈式緩存來填充顯示memcached的。之前的狀態報告仍然會從數據庫中刪除,因爲它們很少運行。

在決定將memcached寫入此應用程序時,我的困惑已經來臨,因爲memcached的性能顯然是通過每次緩存更新的多重命中來實現的。這個應用程序可能會有多個更新(不過直接從應用程序推送,而不是數據庫),每個緩存讀取。但會在合理大小(2-3GB)的狀態表上保存讀取。

此外,是否有任何互操作性問題編寫/閱讀從不同的語言API memcached?

回答

0

您可能已經在RDBMS中內置了一種高效的多語言chaching機制! 它不大可能通過建立在數據庫系統中的緩存和協調機制來改善。你的時間將會更好地調整你的SQL,以確保它在這些機制中佔據最大的優勢。 (確保SELECT中的併發設置允許「髒讀」,保持工作單元(BEGIN TRANSACTION和COMMIT之間的處理)儘可能短等等)。

按上INNODB以下命令註釋: -

set transaction isolation level read uncommitted; 

將允許您讀取任何插入的行beofre他們致力於 和意志完全igonore任何鎖定和併發性。這樣可以提高 的性能,而不會引起任何問題,因爲應用程序僅插入了Java的一半 。

+0

由於我正在執行的插入是原子(單行插入)。如何允許髒讀取提升運行innoDB的表的性能?我認爲Innodb支持單行鎖定(可能是誤導),因此這些查詢應該干涉彼此? – 2010-11-02 07:53:18

+0

對於那些認爲是有魅力的人來說,非常適合於平衡數據庫的抄襲。數據庫查詢更好地適用於比可用內存大幾倍的數據集,並且它可以在多個位置的多個應用程序服務器上工作,並且與標準的災難恢復/高可用性解決方案配合使用。 – 2010-11-03 01:11:41