程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Mysql數據狀態監聽探討(攢人品)

Mysql數據狀態監聽探討(攢人品)

編輯:MySQL綜合教程

應用場景:

長時間運行程序,需要幾乎整表查詢Mysql,還得在可容忍范圍內響應數據變化。

 

方案一:通過Mysql自帶的表更新時間

查詢方案:SELECT TABLE_NAME,UPDATE_TIME FROM INFORMATION_SCHEMA.tables WHERE TABLE_SCHEMA='Palas_V4';

存在問題:innodb 不支持,需要更換數據庫引擎;只支持表級判斷(可以接受)。

優點:查詢速度快。

變種解決方案:1、創建觸發器,在表執行update/insert/delete 時更新UPDATE_TIME為當前時間戳;2、在數據庫訪問接口處增加程序邏輯來更新該時間戳。

 

方案二:在所有行增加更新時間戳字段

查詢方案:判斷是否修改只需查詢該表最大的updatetime,增量更新僅需要查詢大於上次查詢時間的數據。

存在問題:表每行會增加4bytes的空間消耗,更新時間戳問題可通過mysql自身解決;不支持delete操作,如要刪除需要增加是否有效字段來改變狀態。

優點:可以做到行級的更新。

 

方案三:讀取Mysql文件的系統修改時間

查詢方案:獲取E:\SqlData\data\Palas_V4\ Media.frm 的系統修改時間

存在問題:需要在Mysql所在服務器操作,或者需要遠程訪問它的權限,可能導致安全問題;只支持表級判斷。

優點:速度快,不需要額外表空間或增加mysql負載。

變種解決方案:1、在Mysql所在服務器創建監控服務提供數據庫狀態信息。

 

方案選型:

優缺點分析:

方案一與二均需對數據庫做出相應修改,一所做修改對業務邏輯不會有影響,但對Mysql的操作會增加一倍(實際修改需要8(可能是4)個字節每次的數據量)無網絡傳輸;程序實現邏輯簡單;在數據修改量不大的情況話對性能幾乎沒有影響,但修改後查詢開銷大。方案二對表空間的增長會變大,對業務邏輯會有較小的影響(不再支持刪除),部分表還需要增加字段判斷狀態,修改後查詢開銷較小。方案三性能與一相差不大,但需要額外編程提供狀態查詢,時間和硬盤IO會增大(不顯著)。

選型:

       根據實際情況,排除暫時不會遇到的問題,優先級排列如下:

方案三 -> 方案二 –> 方案一 (方案一排最後是由於太多觸發器會導致表維護困難,更新引擎將使數據庫性能降低)

 

Mysql 開啟獨立表空間:

1. 停掉mysql:  /etc/init.d/mysqld stop  

2. 改my.cnf的配置文件: innodb-file-per-table=1

3. 備份使用innodb引擎的數據庫:  mysqldump -u tg -p tg >/home/6fan/tg.sql;  

4. 刪除使用innodb的數據庫,以及日志文件 。如果不刪除使用innodb的數據庫文件夾,啟動不了innodb引擎。

5. 啟動mysql : /etc/init.d/mysqld start 

6. 導入數據庫: mysql -u root -p  < /home/6fan/tg.sql

有圖形化管理工具的在修改配置文件後直接備份需要監聽的數據庫,然後刪除後恢復也是可以的。

 

構建文件監聽與數據提供服務:

1、 在mysql服務器開啟文件監聽服務,提供get put方法(僅提供狀態,數據需要自己查)

2、 Get方法在全局數據提供服務啟動時調用,Put方法為主動向接受者聲明哪些需要同步

 

構建全局數據提供服務:(Web Api 支持json和xml格式)

1、 啟動時使用get獲取所有文件狀態;

2、 接受put的數據以啟用數據更新(可改為查詢時主動get);

3、 有調用者時返回數據;

4、 對數據進行壓縮處理;保存以便傳輸

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved