파일을 DB에 저장하는것에 있어서.

osanha의 이미지

문득, 궁금하네요...
어떤 게시판 웹사이트가 있다고 했을때. 일반적으론 텍스트는 DB에 저장하고 파일은 그냥 파일시스템에 저장하고 경로를 DB에 저장하지요.
만약, 텍스트가 검색쿼리라던지 여러가지 SQL 에 의존적인 기능이 전혀 필요없이 단지 저장하고, 읽어가기만 한다면..바이너리 파일과 다를바 없는 조건인듯 한데
이럴때, 파일로 저장하는게 나을까요 아니면 DB에 저장하는게 나을까요? 만약 DB라고 한다면 역으로 바이너리 파일은 왜 DB에 넣으면 비 효율적이라고들 할까요?
크기의 차이? 갯수의 차이? 둘다 엄청나게 갯수가 많다면?

송효진의 이미지

파일로 놔두는것과 DB 에 넣는것에 가장 큰 차이점은 저장에 드는 비용이라고 생각합니다.
업로드 된 파일이 적합하여 파일로 저장하는 경우 mv 해서 원하는 경로에 옮겨넣으면 끝이지만,
DB 에 넣으려면 파일스트림을 한번 읽어서 저장해야 되죠.
그만큼 DB 커넥션도 오래 잡고 있겠고요.

응용프로그램에서 그렇게 하는 이유는 웹인터페이스도 없고,
업로드 자체가 DB 접속을 직접 하는 것이므로 웹환경과는 달리
그렇게 해도 손해(?)가 없기 때문이겠지요.

emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇 개 안돼요~
http://xenosi.de/

kukgini의 이미지

test

superwisdom의 이미지

단순히 파일을 저장하는 목적이라면 DB에 넣을 필요는 없지요. 윗분 말씀처럼 득보다 실이 많거든요.

DB를 사용할 때의 장점을 고려해서 판단하세요. DB를 사용할 때의 이득은,

1. 인증을 적용하기 쉽다.
게시판에서 글을 파일로 저장한다면... 보통은 누구나 볼 수 있게 되죠. 비슷한 의미에서, 만약 업로드한 바이너리
파일에 대한 인증이 필요하다고 할 때, 가장 쉽게 구현할 수 있는 방법은 바이너리 파일을 DB에 넣는 것입니다.
(웹 환경에서 DB에 있는 바이너리 데이터를 사용할 때에는, 파일로 떨구지 않고 바로 header를 조작해서 클라이언트에
전달할 수 있습니다. 이 과정에서 인증 여부를 체크할 수도 있구요.)

2. 파일 많을 땐 속도가 더 빠르다.
게시글 하나에 파일 하나라면.. 나중에 이거 골치아파집니다. 파일 개수가 많아지면 느려지죠. 특히 ext3같은 곳에서는요.
(RHEL은 ext3만 보증했는데 요즘에도 그러는지...)
역으로 발상해서, 굉장히 많은 파일에 접근해야 하면 DB를 이용하는 방법도 있습니다. 파일시스템으로 DB를
이용하는 프로젝트도 있을 정도니까요. (MySQL로 5억개의 데이터를 인덱스 태워서 select하면 0.02초 걸리더군요. 데이터 넣는데
23시간, 인덱스 만드는데 2시간이 걸리긴 했지만요.... ㅋ)

3. 편하다.
DB에 넣으면 관리하기 편하죠. 기능 확장하기도 편하구요. 관점에 따라서 다르기는 하겠지만, 백업도 편리할 수 있구요.

drinkme의 이미지

이미 절반의 답은 말씀하셨으니, 부연을 설명을 붙이자면.

일반 text는 query 구성이나 결과처리가 간단한 반면,
binary는 chunk 구성해서 입/출력하기가 좀 귀찮죠.

만약, text가 열라 크고 검색이 필요 없다면
말씀하신 binary처럼 하는 것이 나을 거고요.
괜히 DB의 managed storage를 이용할 필요 없겠죠.

3789hh의 이미지

음 가령 XML 형식에 맞춰 디비와 스크립트를 구성하고 이에 따라 파일을 업로드하면, 규격에 맞게 디비에 저장. 이를 JSON을 통해 파싱해주는 과정을 생각해봤는데 어떤가요..??

댓글 달기

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