[database] DB에 이미지 저장-예 또는 아니요?

그래서 DB에 이미지를 많이 저장하는 앱을 사용하고 있습니다. 이것에 대한 당신의 전망은 무엇입니까? 위치를 DB에 직접 저장하는 것보다 파일 시스템에 위치를 저장하는 유형에 가깝습니다.

장단점은 무엇이라고 생각하십니까?



답변

많은 TB 이미지를 관리하는 일부 응용 프로그램을 담당하고 있습니다. 데이터베이스에 파일 경로 를 저장하는 것이 가장 좋습니다.

몇 가지 문제가 있습니다.

  • 데이터베이스 스토리지는 일반적으로 파일 시스템 스토리지보다 비쌉니다.
  • 표준 제품으로 표준 파일 시스템 액세스를 가속화 할 수 있습니다
    • 예를 들어, 많은 웹 서버는 운영 체제의 sendfile () 시스템 호출을 사용하여 파일을 파일 시스템에서 네트워크 인터페이스로 비동기식으로 직접 보냅니다. 데이터베이스에 저장된 이미지는이 최적화의 이점을 얻지 못합니다.
  • 웹 서버 등과 같은 것은 파일 시스템의 이미지에 액세스하기 위해 특별한 코딩이나 처리가 필요하지 않습니다.
  • 데이터베이스는 이미지와 메타 데이터 간의 트랜잭션 무결성이 중요한 곳에서 승리합니다.
    • db 메타 데이터와 파일 시스템 데이터 간의 무결성을 관리하는 것이 더 복잡합니다
    • 데이터가 파일 시스템의 디스크로 플러시되는 것을 보장하는 것은 (웹 응용 프로그램의 컨텍스트 내에서) 어렵다

답변

대부분의 문제와 마찬가지로 들리는 것처럼 간단하지 않습니다. 데이터베이스에 이미지를 저장하는 것이 적합한 경우가 있습니다.

  • 인보이스와 같이 동적으로 변경되는 이미지를 저장하고 있고 2007 년 1 월 1 일과 같이 인보이스를 받으려고하십니까?
  • 정부는 당신이 6 년의 역사를 유지하기를 원합니다
  • 데이터베이스에 저장된 이미지에는 다른 백업 전략이 필요하지 않습니다. 파일 시스템에 저장된 이미지는
  • 이미지가 데이터베이스에있는 경우 이미지에 대한 액세스를 제어하기가 더 쉽습니다. 유휴 관리자는 디스크의 모든 폴더에 액세스 할 수 있습니다. 이미지를 추출하기 위해 실제로 관리자가 데이터베이스에서 스누핑을 수행해야합니다.

반면에 관련된 문제가 있습니다

  • 이미지를 추출하고 스트리밍하려면 추가 코드가 필요합니다.
  • 대기 시간은 파일 직접 액세스보다 느릴 수 있습니다.
  • 데이터베이스 서버에 더 많은로드

답변

파일 저장소. 페이스 북 엔지니어들은 그것에 대해 큰 이야기를했습니다. 한 가지 해결해야 할 것은 디렉토리에있는 파일의 실제 한계를 아는 것이 었습니다.

건초 더미의 바늘 : 수십억 장의 사진을 효율적으로 저장


답변

약간 긴 시간이 걸릴 수 있지만 SQL Server 2008을 사용하거나 사용하려는 경우 새로운 FileStream 데이터 형식을 살펴 보는 것이 좋습니다 .

FileStream은 파일을 DB에 저장하는 것과 관련된 대부분의 문제를 해결합니다.

  1. Blob은 실제로 폴더에 파일로 저장됩니다.
  2. 블롭을 사용하여 액세스 할 수 있습니다 데이터베이스 연결 또는 파일 시스템을 통해합니다.
  3. 백업이 통합되었습니다.
  4. 마이그레이션은 “그냥 작동”

그러나 SQL의 “투명한 데이터 암호화”는 FileStream 객체를 암호화하지 않으므로 고려해야 할 경우이를 varbinary로 저장하는 것이 좋습니다.

MSDN 기사에서 :

Transact-SQL 문은 FILESTREAM 데이터를 삽입, 업데이트, 쿼리, 검색 및 백업 할 수 있습니다. Win32 파일 시스템 인터페이스는 데이터에 대한 스트리밍 액세스를 제공합니다.
FILESTREAM은 파일 데이터 캐싱에 NT 시스템 캐시를 사용합니다. 이는 FILESTREAM 데이터가 데이터베이스 엔진 성능에 미치는 영향을 줄이는 데 도움이됩니다. SQL Server 버퍼 풀이 사용되지 않습니다. 따라서이 메모리는 조회 처리에 사용 가능합니다.


답변

DB의 파일 경로는 분명히 갈 길입니다-TB 이미지를 가진 고객으로부터 많은 이야기를 들었습니다 .DB에 상당한 양의 이미지를 저장하려고하는 악몽이되었습니다.


답변

내 경험상 때로는 가장 간단한 해결책은 기본 키에 따라 이미지 이름지정하는 것 입니다. 따라서 특정 레코드에 속하는 이미지를 쉽게 찾을 수 있으며 그 반대도 마찬가지입니다. 그러나 동시에 데이터베이스의 이미지에 대해서는 아무것도 저장하지 않습니다 .


답변

여기서 속임수는 열성적이지 않는 것입니다.

여기서 주목해야 할 것은 프로 파일 시스템 캠프에 아무도 특정 파일 시스템을 나열하지 않았다는 것입니다. 이것은 FAT16에서 ZFS에 이르는 모든 것이 모든 데이터베이스를 능가한다는 것을 의미합니까?

아니.

진실은 우리가 원시 속도에 대해서만 이야기 할 때조차도 많은 데이터베이스가 많은 파일 시스템을 능가한다는 것입니다.

올바른 행동 과정은 정확한 시나리오에 대한 올바른 결정을 내리는 것이며,이를 위해서는 몇 가지 숫자와 사용 사례가 필요합니다.