Json 存储大量文本(字符串)供以后使用

Json 存储大量文本(字符串)供以后使用,json,vb.net,string,storage,large-files,Json,Vb.net,String,Storage,Large Files,我正在VB.NET中编写一个windows窗体应用程序,它发出http请求并获取JSON响应 我希望将所有这些JSON响应存储在一个文件中,以便在将来的某个时候(逐行)读取它们,就好像我是从文件而不是从网站/API发出请求一样 我希望读操作尽可能快,而写操作可能相对较慢。因此http请求的频率可以小到1/秒到1/分钟,而我希望读取数据的速度非常快(我猜是500毫秒或更少?) 现在,我只是将每个JSON字符串作为一行新的文本写入txt文件。但是字符串很长,文件很快变得很大 是否有更好的/替代的解决

我正在VB.NET中编写一个windows窗体应用程序,它发出http请求并获取JSON响应

我希望将所有这些JSON响应存储在一个文件中,以便在将来的某个时候(逐行)读取它们,就好像我是从文件而不是从网站/API发出请求一样

我希望读操作尽可能快,而写操作可能相对较慢。因此http请求的频率可以小到1/秒到1/分钟,而我希望读取数据的速度非常快(我猜是500毫秒或更少?)

现在,我只是将每个JSON字符串作为一行新的文本写入txt文件。但是字符串很长,文件很快变得很大


是否有更好的/替代的解决方案来以紧凑的形式存储这些JSON/字符串,以便以后快速阅读?

一般来说,我建议查看数据库。这些数据库使用非关系型(无SQL)模型来提高性能,其中一些(如)面向直接存储/检索json对象

另一种选择是将json文档存储在搜索服务器中,就像搜索服务器可以存储一样。如果您希望像搜索文档一样搜索大量json对象,则此方案更为合适。使用Solr可以在存储数据的方式上提供极大的灵活性,并提供强大的搜索功能

您可以看看高级方法(NoSQL、Solr)想想看,如果使用新技术的学习和过渡曲线能够回报有关性能优势的时间投资,我会首先尝试使用关系数据库,并且只有当我的性能需求很大时,我才会测试NoSQL方法


希望我能帮上忙!

一般来说,我建议大家看一下数据库。这些数据库使用非关系的(无SQL)模型来提高性能,其中一些(如)面向直接存储/检索json对象

另一种选择是将json文档存储在搜索服务器中,就像搜索服务器可以存储一样。如果您希望像搜索文档一样搜索大量json对象,则此方案更为合适。使用Solr可以在存储数据的方式上提供极大的灵活性,并提供强大的搜索功能

您可以看看高级方法(NoSQL、Solr)想想看,如果使用新技术的学习和过渡曲线能够回报有关性能优势的时间投资,我会首先尝试使用关系数据库,并且只有当我的性能需求很大时,我才会测试NoSQL方法


希望我能帮上忙!

.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存储为压缩字符串,并在需要时将其解压。

.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存储为压缩字符串,并在需要时将其解压缩。

取决于您使用的编程语言和环境。您可以尝试使用GZip将文本压缩为二进制,然后对其进行base64编码,以便它仍然可以作为文本包含在JSON中。尽管YMMV性能良好。@Juhana我使用的是VB.net for windows applicaton。取决于您使用的编程语言和环境。您可以尝试使用GZip将文本压缩为二进制,然后对其进行base64编码,以便它仍然可以作为文本包含在JSON中。尽管YMMV性能良好。@Juhana我正在使用VB.net for windows applicaton。谢谢,我已经编辑了这个问题以给出一个I速度要求的NDI。我仍然建议使用更简单的解决方案(关系模型),如果存在性能问题,那么考虑使用NoSQL选项。实际性能与许多因素有关(磁盘速度、JSON大小等)。。作为Steve McConell,您不应该对性能进行任何假设。您应该在做出任何决定之前对其进行测量。我一直在阅读有关SQL DBs的内容。我的理解是,这些只是存储和检索数据的框架,数据库将存储在我的机器上本地。是否可以设置u在一台机器上创建数据库并从另一台机器上访问它?是的。当然。这是经验法则。数据库托管在一台服务器机器上。作为数据库客户端的所有应用程序都连接到此机器(即使它们在其他机器上运行)以访问数据库。没有DBMS(数据库管理系统无法做到这一点)。无论如何,您应该就这一特定问题提出另一个问题。如果您告诉我们您对哪些DBMS感兴趣,我们还可以告诉您如何做到……Efxaristo Pantelis:)我很可能会在某个时候发布一个新的问题。谢谢,我已经编辑了这个问题来给出速度要求。我仍然建议使用更简单的解决方案(关系模型),如果存在性能问题,那么考虑使用NoSQL选项。实际性能与许多因素有关。(磁盘速度、json大小等)。作为Steve McConell,您不应该对性能进行任何假设。您应该在做出任何决定之前对其进行测量。我一直在阅读有关SQL DBs的内容。我理解的是,这些只是fra