2013-12-21 28 views
1

我正在寫一個窗體應用程序在VB.NET中,使http請求和獲取JSON響應。存儲大量的文本(字符串)供以後使用

我想將所有這些JSON響應存儲在一個文件中,以便在將來的某個時間點(逐行)讀取它們,就像我從文件而不是網站/ API發出請求一樣。

我希望讀取操作儘可能快,而寫入可能相對較慢。所以http請求的頻率可以小到1 /秒到1 /分鐘,而我想讀取數據非常快(我猜500ms或更少?)

現在,我簡單地寫每個JSON字符串作爲txt文件中的新文本行。然而,字符串很長,文件變得非常快。

是否有更好的/替代的解決方案來將這些JSON /字符串以緊湊形式存儲以便稍後快速閱讀?

+0

取決於您使用的編程語言和環境。 – JJJ

+0

您可以嘗試使用GZip將文本壓縮爲二進制文件,然後使用base64進行編碼,以便它仍然可以作爲文本包含在JSON中。雖然YMMV表現明智。 – Jack

+0

@Juhana我正在使用VB.net for windows applicaton。 – rex

回答

3

.NET Framework有一個允許這樣做的內置支持。

基本上,你將不得不把你的字符串,並將其轉換爲字節數組。然後你將不得不壓縮(壓縮)你的字節數組並將其轉換爲base64字符串。

Public Function ZipString(stringToZip As String) As String 
    Dim returnValue As String = "" 

    Using output As New MemoryStream() 
     Using gzip As New DeflateStream(output, CompressionMode.Compress) 
      Using writer As New StreamWriter(gzip, Encoding.[Default]) 
       writer.Write(stringToZip) 
      End Using 
     End Using 

     returnValue = Convert.ToBase64String(output.ToArray()) 

    End Using 



    Return returnValue 

End Function 

要獲取原始的字符串,你卻反其道而行之:

Public Function UnZipString(stringToUnZip As String) As String 
    Dim returnValue As String = "" 


    Using inputStream As New MemoryStream(Convert.FromBase64String(stringToUnZip)) 
     Using gzip As New DeflateStream(inputStream, CompressionMode.Decompress) 
      Using reader As New StreamReader(gzip, System.Text.Encoding.UTF8) 
       returnValue = reader.ReadToEnd() 
      End Using 
     End Using 
    End Using 


    Return returnValue 

End Function 

然後,您將能夠在JSON存儲爲壓縮串並解壓縮它時,你會需要它。

+1

是的。您壓縮JSON字符串,然後將其存儲在文件(或DB)中。一般來說,膨脹/放氣性能是可以接受的,但你必須檢查它是否符合你的需求。 –

+0

只是澄清,這是否意味着更少的空間,因爲編碼的字符串比沒有編碼的字符串短? – rex

2

一般來說,我會建議看看NoSQL數據庫。這些是使用非關係(無SQL)模式,以提高性能的數據庫,其中一些(如MongoDB在存儲/直接檢索JSON對象導向。

另一種選擇是將存儲在一個JSON文件像Solr這樣的搜索服務器可以存儲JSON objects directly如果你想搜索大量的JSON對象,就好像它們是文檔一樣,這個場景會更加適合。使用Solr可以爲你提供數據存儲方式的極大靈活性,搜索功能

你可以看看高級方法(NoSQL,Solr),並考慮我們的學習和轉換曲線一項新技術將返回有關性能優勢的時間投資。我會首先嚐試使用關係數據庫只有當我的性能需求是如此之大,然後我會測試NoSQL方法

希望我幫了忙!

+0

謝謝,我編輯了這個問題來給出速度要求的指示。 – rex

+0

我仍然建議使用更簡單的解決方案(關係模型),如果存在性能問題,則考慮使用NoSQL選項。實際性能與許多因素有關(磁盤速度,json大小等)。正如Steve McConell [建議](http://www.amazon。com/gp/product/0735619670?ie = UTF8&tag = lstse01-20&linkCode = as2&camp = 1789&creative = 9325&creativeASIN = 0735619670)你應該對性能沒有任何假設。在做出任何決定之前,您應該對其進行測量。 –

+0

我一直在做一些關於SQL DB的閱讀。我的理解是,這些只是數據存儲和檢索的框架,數據庫將存儲在本地機器上?是否可以在一臺機器上設置數據庫並從另一臺機器訪問? – rex

相關問題