2017-05-07 45 views
0

這裏是我的情況一個大表,多個表VS用JSON序列數據

我有我需要存儲關於對血液樣品進行不同的測試結果信息的應用程序。我目前正在爲Web應用程序使用ASP.Net核心,而數據庫則使用SQL Server。 (可能切換到Postgres,因爲我肯定會在Linux和SQL Server for Linux上託管並不完全可用)

所有測試都具有一些共同的信息,誰在什麼時間執行它,在什麼時間跟蹤任何其他相關信息目的。但是,他們都有特定的變量,我需要保存以進行報告/進一步計算。

截至目前,我們對我們收到的樣品進行了大約20種不同類型的測試。我的問題是保存這些數據的最佳方式是什麼?

兩個選項我看到的是以下幾點:

  1. 有20個不同的表,所有含有一般樣品跟蹤信息+特定的測試變量。這樣,當我需要獲取信息時,可以輕鬆訪問特定類型測試的所有內容。但是,當我想要生成報告或修改示例結果信息(因爲所有測試結果/變量條目表單都在單個頁面中)時,我需要通過連接查詢來查詢所有這些表。如果我只需要很少的時間查詢特定類型的測試,大多數情況下,我需要立即檢索它們,這意味着我每次需要時都會(大多數情況下)查詢20+表訪問示例數據。

  2. 有一個大表包含所有執行的不同測試的結果並僅序列化(JSON格式)特定的測試變量。因此,我會提供所有可用的跟蹤信息(可查詢,可搜索等),但每個測試的變量和結果都將放在單個序列化列中。

重要的是要知道變量/結果將不會被直接查詢,我不需要過濾它們或類似的東西(但至少)。

現在我想知道,在使用多個表與連接查詢與使用需要每次訪問數據時需要發生的序列化/反序列化之間長期的最佳性能。另外,我知道,通過序列化測試結果/變量,我失去了根據它們包含的信息進行查詢的能力(除了SQL Server 2016,現在包含查詢JSON信息的方法,如果我沒有弄錯...)。 我也嘗試通過規範化數據庫來遵循最佳實踐,但我不是專業人士,我不知道我的兩個選項(或任何其他選項,如果有更好的替代方案,我是最好的辦法是什麼完全開放以獲得更好的想法)

那麼最好的方法是什麼?爲什麼?

使用估計 每年可能會進行大約1,500萬到3千萬次測試。其中我會說2/3是5次不同的血液測試,另外三次是所有其他測試。

+0

表現總是一個敏感話題。你用這兩種方法做了一個poc並測量了它嗎?這是唯一確定的方法 – Tseng

+0

你是對的,除了通過測試和基準測試,沒有很多方法來評估性能。我有的問題是我還沒有生產應用程序將運行的服務器,也不知道規格(RAM等),因此我很難設置代表性測試... )。另外,我正在尋找的不僅僅是純粹的表演。但也爲最佳做法。 – Os1r1s110

+0

關係表更適合這種情況。請參閱https://stackoverflow.com/questions/31972056/mysql-embedded-json-vs-table/31977656#31977656 –

回答

0

不同的表格適合不同的測試是一個好主意。 原因1:如果只對樣品的其餘部分進行10次測試,將不必要地浪費DB空間。 原因2:創建報告將根據樣品易於在未來 原因3:數據的濾波將是容易 原因4:維修會很容易

如果在測試情況下是強制去用1個表

+0

對於原因1,我不太確定哪裏會有數據庫空間浪費。如果在單表方案中只需要10次測試,那麼我在這個表中創建10行,並且它們都包含一系列測試信息+它們在序列化列中的特定變量......您能否明確指出哪裏會有空間損失案件? – Os1r1s110

+0

如果您僅使用一張表進行整個測試,那麼數據庫和空間浪費的可能性很大 –