Jsoncpp 에서 큰 data를 파일에 저장할때 빠르게 저장하는 방법

삼구의신의 이미지

jsoncpp 를 이용하고 있습니다.

log data를 jsoncpp로 저장하고 있습니다.
한번 로그를 쌓을 때마다 json data 전체를 파일에 써주다보니
처음엔 괜찮지만 양이 많아 질수록 현저하게 느려집니다...

제 생각에는 시간이 오래 걸리는 이유가 json data를 파일에 저장할 때 string으로 변환하는데
이 부분에서 오래 걸리는것 같습니다.
json data를 string으로 변환하지 않고 그대로 파일에 쓰고 읽고 하는 방법이 있을까요?

아니면 기존 json data에서 추가된 부분만 파일에 저장하는 방법이 있을까요?

아래는 파일에 저장하는 코드입니다.
아래 코드처럼 FastWriter, styledStreamBuilder, stringstreamBuilder? 여러가지를 써봤는데
속도는 비슷합니다.

다른 좋은 방법 있으시다면 조언 부탁드립니다.

		Json::FastWriter fastWriter;
 
		std::string str = fastWriter.write(root);
 
		std::ofstream ofStream;
		ofStream.open(ALARM_LOG);
 
		ofStream << str;
 
		ofStream.close();
jick의 이미지

잠깐만요... 혹시 원래 로그가 100줄이 있는데 한 줄을 추가해야 하면 원래 파일 내용을 싹 날리고 101줄을 처음부터 다시 쓰는 방식인가요?

...그러면 무슨 짓을 해도 당연히 느리죠. -_-;;;

파일을 열 때 append 모드로 연 다음에 새로 생긴 로그만 추가하고, 파일에 쓴 다음에는 메모리에 있는 로그는 비우세요.

삼구의신의 이미지

JSON 파일로 저장하는데 해당 로그만 파일에 JSON형식에 맞춰서 쓸수가 있나요?

yhsuk의 이미지

방안 1)
한 건의 로그 내용만 json 객체로 만들고 문자열 변환시 한 줄의 string으로 만들어 기록하는게 좋지 않을까 합니다.

pretty하게 줄바꿈까지 있는 것이 아니고, 한 라인안에 들어가도록 하는 거죠.
로그 확인시에는 한 줄을 복사해서 pretty하게 보여주는 툴을 쓰고요.

Signature :) - "여유를 갖고 행동하되 게을러지지 말자"

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.