我正在VB.NET中编写一个Windows窗体应用程序来生成http请求并获取JSON响应。
我想将所有这些JSON响应存储在一个文件中,以便在将来的某个时间(逐行)读取它们,就像我从文件而不是网站/ API发出请求一样。
我希望读取操作尽可能快,而写入可能相对较慢。所以http请求的频率可以小到1 /秒到1 /分钟,而我想非常快地读取数据(我想500毫秒或更短?)
现在,我只是将每个JSON字符串写为txt文件中的新文本行。然而,字符串很长,文件变得非常快。
是否有更好/替代的解决方案以紧凑的形式存储这些JSON /字符串,以便以后快速阅读?
答案 0 :(得分: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 :(得分:2)
一般情况下,我建议您查看NoSQL个数据库。这些是使用非关系(无SQL)模型来提高性能的数据库,其中一些(如MongoDB)面向直接存储/检索json对象。
另一种选择是将json文档存储在Solr之类的搜索服务器中,该搜索服务器可以存储JSON objects directly。如果要将大量JSON对象搜索为文档,则此方案更合适。使用Solr可以极大地灵活地存储数据,并为您提供出色的搜索功能。
您可以查看高级方法(NoSQL,Solr),并考虑使用新技术的学习和转换曲线是否会返回有关性能优势的时间投资。我首先尝试使用关系数据库和只有在我的性能需求如此之大以至于我才会测试NoSQL方法。
希望我帮忙!