2012-03-10 86 views
0

我目前正在編寫一個將有很多事務的應用程序。 雖然值可以是int,bit,short string,large string等,但每個事務都會有一個值...不同類型將值保存到SQL數據庫

我想盡量保持處理和存儲的最低限度,因爲我希望在雲端。我應該在交易中有很多不同的領域,例如。

TransactionLine.valueint 
TransactionLine.valuestring 
TransactionLine.valuedecimal 
TransactionLine.valuebool 

或者我應該爲每個值事務值類型分開表。

TransactionLine - Table 
--------------- 
TransactionLine.ValueId 


ValueInt -Table 
------- 
ValueInt.ValueId 
ValueInt.Value 

ValueString - Table 
------- 
ValueString.ValueId 
ValueString.Value 
+0

字符串有什麼問題?一個字符串可以表示一個數字和一個位。 – Andomar 2012-03-10 12:16:11

+0

我想知道這是否是另一種選擇,但是如果每個事務都有一個nvarchar(max),它會佔用更多的空間。我確定我聽說只使用盡可能多的字符作爲您的記錄需要的表現。 - 我可能錯了。 – 2012-03-10 12:24:05

+0

你在做什麼這些交易你甚至不知道數據類型? – eaolson 2012-03-10 13:47:40

回答

1

你可以存儲在數據庫中的鍵值對。唯一可以存儲任何其他數據類型的數據類型是VARCHAR(MAX)或BLOB。這意味着所有數據在被存儲之前必須被轉換爲一個字符串。該轉換將需要處理時間。

在相反的方向上,當您想要做一個SUM或MAX或AVG,...數字數據時,您首先必須將字符串轉換回其真實的數據類型。該轉換也會花費處理時間。

數據庫讀取的內容比寫入的要多得多。轉換噩夢會讓你的系統癱瘓。關於這個話題已經有很多爭論。轉換的高成本是殺手。

有些系統會將整個數據庫存儲在一張表中。但是在這些情況下,整個系統的構建有着明確的目標:以快速編譯的編程語言(如C(++,#))高效地支持該系統,而不是像SQL這樣的關係數據庫語言。

我不知道我完全明白你真正想要什麼。如果您只想存儲交易,這可能是值得嘗試的。但是你爲什麼要一次一個地存儲它們呢?數據以組的形式存儲在記錄中。並且記錄中每個列的數據類型在表的創建時已知。

1

你真的應該看看cassandra。當你說很多交易時,你的意思是數百萬條記錄?對於卡桑德拉來說,處理數百萬條記錄是一種常態。您將有一個column family(在rdbms中,表類似於列族)存儲多行,並且對於每一行,您不需要預定義列。它可以根據需要進行定義,從而大幅降低存儲量,特別是在處理大量記錄時。

如果數據是data type int,string,decimal或bool,則不必擔心,因爲列值的默認數據類型位於BytesType中。如果需要,還可以在列族元數據中預定義其他數據類型。由於您正在開始編寫應用程序,因此我建議您花點時間閱讀cassandra,以及它如何幫助您解決問題。