編譯什麼都隊-資料庫設計心得
資料庫設計心得
專案名稱:Iot WEB平臺
小組:編譯什麼都隊
指導老師:李軍義
小組成員:趙子安 劉駿馳 王韓 吳階成 李國平
前言:
在本次軟體工程導論課程中,需要完整的做一個真實的專案,從需求到原型,再轉化為資料庫,將之前學些的所有課程完全串聯並在做中學去解決課程設計的一切難題。
在這次專案設計中,我們小組所選擇的是設計一個IOT 物聯網的基礎平臺,這對我們來說是一個全新的領域。在不斷的學習和討論中,這扇陌生的大門終於對我們開放,組裡的每一位同學都充滿了激情。
第一部分:需求討論
我們的專案是中大資料檢測的真實公司專案,主要工作為重構基礎平臺及優化目前的問題,現有的平臺存在的問題之一是在資料量極大的情況下,資料檢索速度慢,但是對於一些地質災害的檢測,又要保證資料的實時更新,給伺服器帶來了巨大的壓力所以我們對已有的場景進行了深層次的分析,挖掘和優化。相比於其他組的專案,只需要設計一個數據庫,我們這個專案需要分層分節點去設計不同層次的資料庫,本專案的核心值是一個基礎平臺,為了老師在後期進行測試,我們還需要做一個業務場景的平臺去呼叫基礎平臺的API,這裡不僅需要從基礎平臺的總資料庫中呼叫資料,還需要有自己業務場景的資料儲存,又是另一個數據庫,資料庫的複雜性大致如此。
和老師多次開會了解完全部的需求之後,我們基礎平臺設計瞭如下的三層儲存,
1·最底層是裝置儲存節點儲存來自感測器的實時當天資料,
2·第二層是中間資料庫,儲存來自裝置轉發的一週的資料
3·第三層是雲端資料庫,儲存所有歷史的資料
當上層的業務場景平臺去查詢資料時,我們根據不同的時間節點,區域匹配到不同的資料庫,如果說只需要當天實時的資料,將它轉發到最底層的裝置資料庫進行查詢即可,如果需要近一週或半年的,那麼轉發到中間層資料庫原來的設計是感測器的資料,經過裝置轉發之後傳送給資料總庫,所有的查詢都是在資料庫裡面查詢,對於這個級別的資料,查詢速度較慢我們深入分析之後發現大部分的業務場景對於感測器資料這種實時要求比較高,他們查詢的時間範圍也多數集中在一週之內,所以按照上述三層次節點儲存, 將大部分的業務需求給分離出去,既提高了使用者查詢速度的體驗又大大降低了雲端資料總庫的訪問壓力。
這給我們很深的感悟是設計資料庫之初必須要根據真實的業務需求,去思考設計的方向。
如果沒有老師的指導,我們可能也會按照過往經驗做後臺管理系統,那樣直接開始設計一個數據庫儲存,然後進行欄位的設計,卻忽略了對業務場景進行最優的匹配。
第二部分:具體表設計
在具體的資料庫設計過程中,我們多次組內討論,對於感測器類別和具體型號的關係,裝置具體類別和型號的關係,以及裝置和感測器之間的繫結與解綁,這些資料表該如何進行設計?
我們剛開始的想法是根據不同的感測器去設計不同的表,因為感測器的測量屬性不一樣,測量的類別不一樣,單位不一樣,測量的個數也不一樣,如果強行設計在一張表裡面,恐怕會造成大量的欄位的浪費。 例如拉力索引器,
和老師進行這一部分的討論,讓我們深刻感受整個設計的思想一定要站在一定的高度和工程經驗的基礎上去思量,否則設計的資料庫只是空中樓閣,不堪實用
第三部分:老師的建議
在具體的欄位和優化中,周老師和李老師都分別給我們的初版進行建議,其中周老師在小班課上一山見血的指出了我在設計的過程中,使用varchar的長度太短,我之前考慮的是一個使用者名稱,應該不會超過十個漢字,但是卻沒有考慮一個漢字,要佔兩個長度,所以出現一個很明顯的嚴重的失誤,就是所有欄位的設計長度都偏短,這讓我在事後進行了深刻的反思,對於細節的把控,才是我們是否有一個良好設計的關鍵,這一點我還是不夠踏實。
李老師指出了我們的另一個方面的問題,我大量的使用了varchar型別,但是這個是可變長度,對應的索引也會很多,無形中增加了資料庫的檢索速度和系統的整體負擔,這一點醍醐灌頂,讓我更加深刻的理解到系統的優化,不是說最後設計完之後再反過頭去進行優化,而是在設計之處,就要考慮每一個細節.
第四部分:心得體會:
- 從各種資料的查閱到開始的需求分析、概念結構設計、邏輯結構設計、物理結構設計,親身體驗了一回系統的設計開發過程,很多時候看起來很簡單的東西,貌似思路非常清晰。但真正需要我們想辦法去實現一個系統的時候才發現其中的難度。很多時候感覺後面的設計根本無法繼續,感覺像是被前面做的圖限制住了。經常做到後面的時候突然察覺我們一開始的設計有問題,然後再回去翻工,但是也在各種反覆中不斷地完善了我們的想法和能力。
- 這次課程設計加深了我們對資料庫系統設計相關知識以及MySQL相關功能的理解以及power designer的使用。比如在建立基本的表、檢視、索引、儲存過程等,根據後面的資料庫學習,我們發現自己的資料庫設計還不是很高階,像觸發器這類的東西就沒有加入。但是我們也在‘做中學’,在解決各種問題的過程中學到了非常多新的知識。在設計中我們基本能按照規範的方法和步驟進行,先對系統進行調查,再查閱有關資料、進行討論最後確定設計方案,然後設計並製作,然後再去找老師評審,再翻過頭進行迭代。設計過程中我們深刻的認識到迭代開發的重要性,也對資料庫的設計更加熟悉。
總的來說,這次資料庫設計很好的將課程與實際相結合,我們的能力有了進一步的提升,對於專案的設計也有了更深的理解