[질문] 파일 중간에 끼워넣기

shint의 이미지

SQLite가 너무 성능이 느려서. 파일 저장방식으로 바꿨습니다.
그와중에 XML도 괜찮을것같아서 테스트 중인데요.
파일로도 구현해보면 어떨까해서 해볼려고 합니다.

1. 파일 중간에 데이터를 끼워넣으려면. 파일을 나눈후에 저장해서 합치는 방법이 좋을까요?
2. 아니면. 그냥 다 읽은후에 모두 새로 저장하는게 좋을까요?
더 좋은 방법이 있는지 알고 싶습니다.

chadr의 이미지

데이터베이스를 사용하는 이유는 일단은 검색, 무결성, 호환성입니다.
만드시는 프로그램이 위의 이유를 전부 만족해야한다면 지금 작성하시는 파일 저장방식이
sqlite가 되어갈 확률이 높습니다.

데이터베이스가 너무 느린 경우라면 쿼리나 인덱스등 최적화를 한번 생각해보시는 것도 좋으실것 같습니다.
또한 데이터베이스가 쿼리를 수행하는 과정 중 문자열로 작성된 쿼리를 컴파일하고 쿼리 계획을 세우는데
꽤나 많은 시간이 걸립니다. 이를 줄이기 위해서 statement라는 것을 sqlite에서 지원합니다. 만약에 안쓰셨다면
써보시기를 강력히 권장합니다.

지금 하실려는 기능은 만약에 시스템에 문제가 생길 경우에는 데이터가 손실되는 문제가 있습니다.
데이터베이스는 이러한 문제가 생겨도 롤백이 가능하도록 하는 기능이 존재합니다.

일단 파일시스템 구조상 중간에 데이터를 끼워넣는게 힘듭니다. 그래서 일단 뒤에 붙여넣고 검색이 필요할 경우를
대비하여 레코드를 찾을 수 있는 메타데이터를 같이 넣습니다. 그리고 더 빨리 찾을수 있도록 인덱스를 구성합니다.

대충 이런것이 데이터베이스입니다.

1번 방법의 큰 성능상 문제는 파일을 나눈후(디스크에 기록) 합치는(나눈 것을 다시 메모리로 읽어서 디스크에 기록)것은
엄청난 디스크 액세스를 유발합니다. 더 느려지죠.

2번 방법 또한 레코드 하나 끼워넣을려고 디스크에서 데이터를 다 메모리에 넣고 그걸 다시 디스크에 기록합니다. 더 느려지죠.

성능상 가장 좋은 방법은 그냥 뒤에 붙여넣는 것입니다.
그러다보면 아마 만드시는 파일저장방식이 sqlite가 될겁니다.

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

shint의 이미지

하나하나 잘 설명해주셨네요.
말씀하신 내용이 참 많은 도움이 되었습니다.

다행이도. 문제시되었던 sqlite의 성능저하현상은 어떤분의 도움으로
해당 쿼리를 아래.위에 넣었더니 향상되었습니다.
db.transaction()
실행루틴.
db.commit()

여러분들의 도움과 답변 감사하게 생각합니다. ㅇ_ㅇ'''

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.