Database-Design

用於儲存感測器數據的首選數據庫解決方案

  • January 13, 2019

作為一個愛好項目,我正在開發一個系統,該系統儲存來自房子周圍不同類型感測器的數據。目前它是使用 ASP.Net MVC 6 和 MongoDB 作為數據庫實現的。(我之所以選擇 MongoDB,是因為我很好奇它是如何工作的)每個感測器都會周期性地將數據發佈到它自己的伺服器上。

為了不必儲存可能數百次相同的資訊,我正在使用冗餘數據的引用。此數據包括感測器的類型、感測器使用的數據欄位(以及有關欄位的資訊,如名稱等)。

以下是 JSON 格式的範例:

// Sensors collection
{
   _id : 1,
   TypeId : 1
}

// SensorTypes
{
   _id : 1,
   GenericName : "Test sensor",
   FieldIds : [1, 2]
}

// Fields
[{
   _id : 1,
   Name : "field1",
   DecimalPlaces : 2
},
{
   _id : 2,
   Name : "field2",
   DecimalPlaces : 3
}]

問題:

  1. 這是好習慣嗎?我是否使用正確和首選的方式來避免數據庫中的冗餘?
  2. 我的文件的“架構”可以像圖表一樣顯示。像 Neo4j 這樣的圖形數據庫會更適合我的問題嗎?

謝謝您的幫助!

通常,您不希望將填充到您使用的任何 NoSQL 解決方案中的數據標準化,換句話說,您希望將冗餘資訊留在那裡。否則,您應該使用關係數據庫系統,如 MySQL、Postgres、SQLite 或 MSSQL(Express 版是免費的,但有數據庫大小限制)。如果您使用這些系統中的任何一個,減少冗餘資訊將是有益的。

老實說,如果您想獲取一堆感測器數據,然後稍後將其顯示為圖表,您可能需要考慮設置一個帶有 Elasticsearch + Kibana 的框。只需極少的配置,您就可以在幾分鐘內啟動並執行一些東西:https ://www.elastic.co/products/kibana

當 Neo4j 稱自己為“圖形數據庫”時,它不是單詞視覺意義上的圖形,而是關係意義上的圖形:https ://en.wikipedia.org/wiki/Graph_database

希望有些幫助。

我認為它有點過時了,但我想分享我在 MongoDB 和 Sensor 數據方面的經驗。開發過程非常簡單快捷,但項目期間的一些缺點造成了太多問題,我們不得不將其更改為 MSSQL。

第一個問題是數據失去了 - 更損壞了。我們可以看到數據,但是儲存文件的數量與 Iterable 文件的數量完全不同。失去的數據量約為 1/3。這是在 MOngoDB 中發生的事情,正如我在許多 NoSQL DBS 中聽到的那樣。但是,如果您需要伺服器接受的所有資訊,那麼這可能是一個主要缺點

其次是聚合查找。它基本上是一個左外連接,我花了很長時間才能夠進行任何連接。無法將所有數據放在一個文件中,因為數據包大小將超過 16MB(當所有不同的感測器值都寫入一個文件時)

第三是缺乏方案:由於控制器錯誤,在從攝氏度到開爾文的協調過程中,現場設備(感測器)的某些值被破壞。MongoDB 沒有驗證器,我在 DBS 中得到了一堆奇怪的值。那有大約 5 天的成本,因為我們相信錯誤出在星展銀行,

放置驗證器的成本很高,首先,如果您有超過 50 個鍵值對,則幾乎不可能正確創建它。不談績效成本

為什麼我們選擇 MSSQL 而不是 Mongo 基本上已經在上面描述了。出於報告目的,Grafana 具有 MSSQL 驅動程序,並且執行良好

回到您的問題:如果您以您已經完成的方式儲存冗餘,則不存在這種感測器類型的保證(您可以通過使用 PK 和 FK 使用關係 DBS 輕鬆更改這一點)

如果您以這種方式使用它,您最終將使用查找 - 這可能需要大量處理時間,並且引用的一個文件的更改可能會導致您失去數據,因為 mongoDB 不會像關係 DBS 那樣自動檢查它。

BR香港

引用自:https://dba.stackexchange.com/questions/132118