2012-10-09 27 views
0

我正在開發車隊調度應用程序,並尋找一種有效的方法來存儲地理位置之間的距離。將距離矩陣存儲爲SQL Server數據庫中的VarChar(最大值)

應用程序代碼訪問矩陣作爲二維數組double[,]

爲了使矩陣持久化,我當前序列化爲矩陣的矩陣。序列化後,它看起來是這樣的:

"1 4 9 8 3 6 \n 
5 6 7 9 3 6 \n 
34 4 5 6 6 7 \n" 

然後將其存儲在varchar(max)類型在SQL Server 2008數據庫中的列。但是,我想知道這個字符串是否會變得太大。

假設每個條目都有一個數字並忽略空格和「\ n」,理論上我可以將大約46000個位置(2 147 483 647的平方根 - 大小爲varchar(max))的距離存儲在一個位置條目。這在我的情況下就足夠了。

這種方法有什麼嚴重缺點嗎?將距離存儲在一個額外的表中,每行包含兩個位置之間的距離會更好嗎?

如果100個用戶我們的應用程序分別存儲1000點的位置,我會在這樣一個表億= 100 * 1000 * 1000行....

+1

爲什麼你認爲你需要以這種非關係的方式存儲數據? (關係規則1:列中沒有數組,只有標量)。它使得以任何效率查詢矩陣內容幾乎是不可能的。 – RBarryYoung

+0

我不需要查詢矩陣。如果用戶使用應用程序,則所有距離一次加載到double [,] - 數組中。我不想選擇單個距離,只是整個矩陣,這確實是必要的。但是,如果某些距離已更新,則必須重新構建整個字符串。 – curiosity

+0

我不明白爲什麼每次單個值更改時都要重建整個編碼字符串?這看起來非常低效,並且完全可以避免(無論如何,在數據庫中),通過簡單地不以這種方式編碼事物。這仍然會引發一個問題:你爲什麼認爲你需要這樣做? – RBarryYoung

回答

1

您可以在陣列只壓縮到BLOB字段。這將是最有效的。而不是序列化爲一個字符串,壓縮到一個字節數組,反之亦然讀取。