2012-01-17 59 views
0

我想開發一個網絡系統的接口。基本上,一個軟件通過UDP和其他軟件收集所有流量datada,並將數據插入到mysql(客戶端不具有mysql服務器,只有具有用戶界面訪問權限的服務器具有mysql服務器)。 有大約50個客戶端有真正的高流量和插入操作在MySQL服務器上真的很快。但我想知道性能問題,我打算用推送服務器或其他東西實時打印統計信息,而且這些流量統計信息必須保存很長時間,所以我應該使用什麼樣的數據庫引擎? myisamm,innodb,檔案?有人可以向我解釋一下嗎?我也歡迎您的建議PHP的mysql選擇引擎類型的統計

回答

1

我認爲您需要做的最重要的事情就是建立一個環境,您可以在其中進行一些測試並分析不同方法。

MyISAM對於你剛剛談論的事情可能會很快,你只需要將行添加到表的末尾,然後對它執行選擇操作 - 不會刪除或更新。

您需要定期存檔較早的行,我相信存檔存儲引擎可能非常適合這一點,但我從來沒有機會使用它,也沒有經驗。不過,我懷疑它可以用作應用程序的主表。您可以考慮進行某種分區,例如您可以按月將結果存儲在不同的表格中。

該書High Performance MySQL應該可能是您的第一個停靠港。

聽起來像一個宏偉的項目 - 祝你好運。

+0

我前幾次檢查過這本書,是的,這真的是一個好的開始,但如你所知,在現實世界中,生產環境變得骯髒,書籍只有理論上的暗示 – cia 2012-01-17 15:53:32

1

這裏是InnoDB和MyISAM的細節

  • 的MyISAM是高讀取量,InnoDB的高更新量更是由於表VS行鎖定。

  • innodb是日誌記錄的,並且可以從myisam無法運行的崩潰中恢復,非常類似於NTFS與FAT文件系統。

  • myisam有全文索引,innodb沒有。

  • innodb有交易支持,提交和回滾,myisam缺乏這些。

因此,如果您不真正關心更新和恢復表,並且不需要事務支持,則可以使用MyISAM。要解決大量數據的問題,您可以考慮使用MySQL分區,然後定期使用歸檔引擎將舊條目歸檔到備份表中。
如果你真的關心閱讀速度,你也可以考慮延遲插入。

UPDATE:
對於MyISAM表,如果有數據文件的中間沒有空閒塊,併發的SELECT和INSERT語句的支持。在這些情況下,你很少需要在MyISAM中使用INSERT DELAYED。 insert-delayed

+0

如何使用其他數據庫服務器,如hypertable?你有什麼經驗嗎? – cia 2012-01-17 15:54:33

0

您應該建立每天更新的統計表,您可以查詢所需的統計數據。

+0

實際上,我打算實施一個用於用戶界面的推送服務器,以便他們可以看到實時統計信息,因此cron每天都能解決我認爲不能解決的問題? – cia 2012-01-17 15:55:28