2009-02-08 4 views
8

SQL 데이터베이스 내에 많은 양의 텍스트 (예 : html 페이지)를 저장하는 것이 좋은 생각입니까? 또는 파일 시스템에 html 파일로 저장하는 것이 더 좋은 생각입니까?SQL의 대형 텍스트 및 이미지

이미지도 마찬가지입니다. 이미지 데이터를 데이터베이스에 저장하거나 디스크에 저장하는 것이 좋습니까?

대용량의 데이터를 저장하면 예를 들어 성능 문제가 발생합니까? 각 저장 방법의 장단점은 무엇입니까?

데이터의 크기면에서이 경우 나는 약 500kb 미만의 크기의 HTML 및 이미지 (아마도 훨씬 더 작음)의 "몇 페이지"영역을보고 있습니다. 평균 기사/블로그 항목/기타 규모 웹 페이지를 생성하기에 충분합니다.

답변

7

데이터베이스에 바이너리 데이터 (문서, 이미지 등)를 저장하는 데는 몇 가지 이점이 있습니다.

  • 문서에 대한 정보 (이름, 날짜 등)와 동일한 트랜잭션에서 문서 자체의 업데이트를 커밋 할 수 있습니다. 즉, 자신의 2 단계 커밋을 작성하는 것에 대해 걱정할 필요가 없습니다 (ISTR은 SQL Server 2008에이 솔루션이 있음).

  • 당신은 파일 시스템과 데이터베이스를 동기화하는 데에 대한 걱정없이, 한 번에 훨씬 (문서 및 메타 데이터)를 백업 할 수 있습니다

  • 당신은 매우 간단 .NET 웹 서비스를 통해 문서를 제공 할 수

    이후 DataTable에 곧바로 들어 와서 DataTable을 DataSet에 배치하고 전달하는 것만으로 쉽게 직렬화됩니다.

  • 나머지 데이터는 개체에 데이터베이스 보안을 적용 할 수 있으며 네트워크 파일 사용 권한을 염려 할 필요가 없습니다.

너무 몇 가지 단점을 가지고 않습니다

  • 백업 파일이 것보다 상당히 클 수 있습니다 매우 큰

  • 데이터베이스에 바이너리 객체의 크기를 얻을 수 있습니다 원래 클라이언트가 왔기 때문에 클라이언트 - 서버 환경에서는 네트워크를 통해 클라이언트 - 서버 환경을 여는 데 걸리는 시간이 길어질 수 있습니다.

  • 응용 프로그램에 따라 많은 양의 큰 문서를 처리해야하는 경우 데이터베이스 서버의 부하를 고려해야 할 수도 있습니다.

내가 말했듯이 이것은 널리 사용되는 기술이며 매우 잘 작동합니다.

2

더 넣을수록 움직일수록 더 많은 오버 헤드가 만들어집니다.

훌륭한 웹 서버가있는 경우 웹 서버에 모든 스트레스를 위임 할 수있을 때 아무런 이유없이 데이터베이스에 모든 추가 스트레스를 추가 할 필요가 없습니다.

유지 관리의 관점에서 봐도 데이터베이스를 계속 사용하지 않고 멋진 논리 구조로 파일을 이동하고 작업하는 것이 훨씬 쉽습니다.

1

크기 문제입니다. 이미지/텍스트의 실제 크기에 따라 다릅니다.

이러한 값을 DB에 저장하는 것은 파일 시스템 기반 접근 방식보다 많은 이점이 있지만 특정 시점에서 비효율적입니다. 예를 들어, 극도로 고해상도의 이미지를 DB에 저장하지 않을 것입니다.

그래서 문제의 정도는 문제이며 응답은 HW 리소스와 시스템 아키텍처에 따라 달라진다는 것을 의미합니다. 그래서 나는 당신의 질문에 하나의 정답이 있다고 생각하지 않습니다. 어쩌면 당신이 저장하려고하는 것과 서버가 어떻게 보이는지에 대한 세부 사항을 우리에게 더 알려줄 수 있습니다.

1

나는 양쪽 다 논쟁 할 수 있다고 생각하지만 많은 양의 텍스트가 괜찮 으면서 내려서 검색 할 수있게되지만 이미지는 데이터베이스의 링크가있는 별도의 파일로 저장되어야합니다. 가능한 경우에도 데이터베이스에 이미지를 저장해야하는 강력한 이유는 절대로 발견하지 못했습니다.

0

PHP를 프로그래밍 할 때 내 딜레마 중 하나였습니다. blob과 같은 이미지를 데이터베이스에 저장하면 보안 및 사용 권한을 쉽게 관리 할 수 ​​있지만 비용이 많이 듭니다. 필자는 데이터베이스와 파일 시스템의 이진 내용에 항상 일부 메타 데이터를 저장하는 데 익숙했습니다. 이미지에 대한 액세스가 직접적이었던 것은 아니지만 (<img src="showimage.php?id=$id" />) 이미지를 표시하기 전에 세션을 통해 사용자 인증 및 권한을 확인한 PHP 스크립트가 이미지에 대한 액세스를 직접 제공했습니다(). 나는 당신이 그렇게 할 것을 제안한다. (당신이 일하고있는 어떤 종류의 응용 프로그램 이건간에).

1

다른 중요한 고려 사항은 텍스트와 이미지의 이러한 큰 부분이 얼마나 자주 바뀌는 지입니다. 데이터 변경으로 인해 조각화가 발생합니다. 단편화는 데이터 파일과 데이터베이스 구조에서 모두 발생할 수 있습니다. 파일 시스템은 데이터베이스보다 조각화를 처리하는 데 훨씬 적합합니다. 파일이 자주 변경 될수록 시스템이 더 빨리 조각납니다. =>는 백업을 간단하게 당신이 할 수있는 데이터베이스에

1

저장 텍스트

예, 데이터베이스에 많은 HTML 콘텐츠를 저장해야합니다. 각 문서에 전체 웹 페이지 구조를 저장하지 않고 한 페이지에서 다음 페이지까지 다양한 내용을 데이터베이스에 저장하기 위해 템플릿 시스템을 사용해야합니다.

실제로 우리가 배포 한 대부분의 웹 사이트는 10MB의 텍스트 콘텐츠 (우리는 우리 자신의 사용자 정의 템플릿 시스템을 사용)를 초과하지 않습니다. 순수한 텍스트 10MB의 당신이 교환 할 수있는 능력을 상실하기 때문에 컨텐츠 (믿거 나 말거나)

일반적으로 파일 시스템에

사진을 저장하여 많은, 그것은 데이터베이스에 이미지를 저장하는 단지 나쁜 생각입니다 사진을 FTP로 빠르게.

유지 보수도이 방법이 더 쉽습니다. 로고, 기사 사진 및 지원 그래픽은 웹 사이트의 수명주기 동안 많이 바뀝니다. 텍스트와는 달리, 사진의 바이너리 데이터를 데이터베이스 편집기에 정확히 잘라 붙일 수 없습니다 ....

데이터베이스가 손상된 경우 - 더 자주 발생하는 경우 문제가 발생합니다. 이미지를 데이터베이스에 저장하십시오. 파일 시스템 손상은 제한된 수의 파일에만 영향을 미칩니다. 데이터베이스 손상은 백업을 가져오고, 그 시간은 빠릅니다.

관련 문제