四、數據庫設計
4.1 數據庫選用
考慮SQL Server、MySQL、SQLite這三款數據庫。
SQL Server和MySQL從性能來說,沒有實質性的差別。SQL Server是收費軟件,如果使用免費版,會有一些限制(例如數據庫大小、CPU核數等)。
SQLite相對於上述兩款數據庫,優點是體積小、無需安裝。缺點是它沒有數據庫高級的功能(例如用戶管理)。
在選用數據時,考慮幾個應用場景:
(1)現場安裝越簡單越好。對於複雜並且固定的安裝,其實可以在廠商出貨前,讓廠商在工控機上安裝好。
(2)實際使用的數據庫功能都是比較基礎的。
綜合上述的分析,推薦採用SQLite數據庫。
4.2 舊數據轉移
在採用新的數據庫架構時,會遇到舊數據的處理問題。解決辦法是製作小工作,從舊的數據庫、舊的數據庫格式裏提取數據,轉移到新的數據庫架構中。
4.3 數據庫備份文件
數據庫本身有備份/還原、導出/導入等功能。備份功能是整個數據庫的備份,而導出功能得到的是SQL文件。總體來說,這兩種方法都不夠靈活。在需要備份某個表、某個字段、某個時間段內的數據時,上述的方法難以滿足。
我們採用以下的備份/還原方法:
備份:
(1)使用SQL語句查詢目標記錄。
(2)把目標記錄按一定格式存儲成文件,保存。
還原:
(1)讀取備份文件,根據格式解析其內容,拼接成SQL語句。
(2)插入或更新數據庫記錄。
備份文件格式如下:
字節數 |
2 |
1 |
1 |
L |
8 |
內容 |
文件頭 |
版本 |
因子名長度L |
設備名 |
起始時間 |
字節數 |
8 |
4 |
8*N |
|
|
內容 |
結束時間 |
記錄條數N |
記錄數據 |
|
|
4.4 每日備份
在突然斷電、系統異常等情況下,數據庫會出現損壞的情況。考慮到數據的安全性,需要每日備份,備份內容爲當日產生的新數據。
如果有條件,備份內容應跟原始數據庫放在不同的硬盤中,或者可以上傳到中心服務器。
4.5 設備採集數據存儲
在一臺工控機上,連接了若干臺分析儀,而每臺分析儀,又有若干需要存儲到數據庫的因子。其存放方法如下:
(1)採集數據統一存放在一個表中。
(2)數據表的第一個字段是採集時間,除此之外,其他字段都是動態的。
(3)對於ID爲n的因子,其在數據庫中存放的字段名爲Vn,例如ID爲13的因子,其數據字段爲V13。
(4)數據格式統一爲雙精度浮點數。
(5)在因子創建時,字段同時被創建。
(6)在因子被刪除時,字段同時被清理。爲保證數據的安全性,所有刪除操作,原數據都會被保存在特定的地方。
(7)可以選擇被刪除的數據,導入到當前數據表的某個因子數據裏。導入後,該保留數據即會被永久刪除。