2013-12-21 5 views
1

나는 HTTP 요청을하고 JSON 응답을받는 VB.NET에서 Windows 양식 응용 프로그램을 작성하고 있습니다.나중에 사용하기 위해 대량의 텍스트 (문자열) 저장

웹 사이트/API 대신 파일에서 요청을 작성하는 것처럼 앞으로 이러한 JSON 응답을 모든 파일에 저장하여 (한 줄씩) 읽을 수 있습니다.

필자는 쓰기 작업이 상대적으로 느리지 만 가능한 한 빨리 읽기 작업을하고 싶습니다. 그래서 HTTP 요청의 빈도는 1/초 ~ 1/분 정도로 작을 수 있습니다. 데이터를 매우 빠르게 읽으려고합니다. (500 밀리 초 이하라고 생각하십니까?)

바로 지금, 저는 각각 JSON 문자열을 txt 파일의 새 텍스트 줄로 사용합니다. 그러나 문자열은 길고 파일은 매우 빠르게 커지고 있습니다.

빠른 읽기를 위해 이러한 JSON/문자열을 소형 형식으로 저장하는 것이 더 좋고/대안적인 해결책이 있습니까?

+0

사용중인 프로그래밍 언어 및 환경에 따라 다릅니다. – JJJ

+0

GZip을 사용하여 텍스트를 바이너리로 압축 한 다음 base64로 인코딩하여 텍스트로 JSON에 포함 할 수 있습니다. YMMV를 통한 성능 향상. – Jack

+0

@Juhana 저는 windows applicaton에 대해 VB.net을 사용하고 있습니다. – rex

답변

3

.NET Framework에는이 작업을 수행 할 수있는 기본 제공 기능이 있습니다.

기본적으로 문자열을 가져와 바이트 배열로 변환해야합니다. 그런 다음 바이트 배열을 압축 (zip)하여 base64 문자열로 변환해야합니다.

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을 저장하고 당신이 그것을해야 할 때 압축을 해제 할 수 있습니다 :

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 

원래 문자열을 얻으려면, 당신은 반대를 할.

+1

예. JSON 문자열을 압축 한 다음 파일 (또는 DB)에 저장합니다. 일반적으로 팽창/수축 성능은 허용되지만 사용자의 요구에 맞는 것인지 확인해야합니다. –

+0

인코딩 된 문자열이 인코딩 된 문자열보다 짧기 때문에 공간을 덜 차지한다는 의미입니까? – rex

2

일반적으로 나는 NoSQL 데이터베이스를 살펴볼 것을 제안합니다. 이 성능을 개선하기 위해 비 관계형 (NO SQL) 모델을 사용하는 데이터베이스이며, 그들 중 일부는 (같은 MongoDB은/저장 직접 JSON 객체를 검색에서 지향하고 있습니다.

또 다른 옵션은에서 JSON 문서를 저장하는 것입니다 Solr과 같은 검색 서버에 JSON objects directly을 저장할 수 있습니다.이 시나리오는 대량의 JSON 객체를 문서처럼 검색하려는 경우에 적합하며 Solr을 사용하면 데이터 저장 방식이 매우 유연 해지며 검색 기능.

고급 접근법 (NoSQL, Solr)을 살펴보고 학습과 전환 곡선이 새로운 기술을 도입하면 성과 이익과 관련하여 시간 투자를 회수 할 수 있습니다. 첫 번째는 관계형 데이터베이스을 사용하려고합니다. 성능 요구가 너무 크면 NoSQL 접근 방식을 테스트 할 것입니다..

희망이 있습니다.

+0

감사합니다. 속도 요구 사항을 나타내는 질문을 편집했습니다. – rex

+0

더 간단한 솔루션 (관계형 모델)을 사용하고 성능상의 문제가있는 경우 NoSQL 옵션을 사용하는 것이 좋습니다. 실제 성능은 여러 요소 (디스크 속도, json 크기 등)와 관련이 있습니다. 스티브 맥 셀 (Steve McConell) [http : //www.amazon.co.kr/gp/product/0735619670? ie = UTF8 & tag = lstse01-20 & linkCode = as2 & camp = 1789 & creative = 9325 & creativeASIN = 0735619670) 성능에 대한 가정을하지 않아야합니다. 의사 결정을하기 전에 측정해야합니다. –

+0

저는 SQL DB에 대해 읽은 적이 있습니다. 내가 이해할 수있는 것은 데이터가 저장되고 검색되고 데이터베이스가 내 컴퓨터에 로컬로 저장되는 프레임 워크 일 뿐이라는 것입니다. 한 컴퓨터에서 데이터베이스를 설정하고 다른 컴퓨터에서 데이터베이스에 액세스 할 수 있습니까? – rex

관련 문제