programing

파일 시스템이 아닌 데이터베이스에 파일을 저장하시겠습니까?

javaba 2023. 5. 29. 21:32
반응형

파일 시스템이 아닌 데이터베이스에 파일을 저장하시겠습니까?

일반적으로 파일 시스템과 달리 데이터베이스(특히 mssql)에 파일을 저장하는 것은 성능 저하의 어느 정도입니까?애플리케이션 이동성 외에 SQL 서버에 파일을 varbinary로 저장하려는 이유를 찾을 수 없습니다.

다음 답변을 확인하십시오.

DB에 이미지 저장 - 예 또는 아니오?

기본적으로 사용자 수에 따라 공간 및 성능 측면에서 큰 영향을 미칠 수 있습니다.또한 웹 서버는 저렴하고 로드 밸런싱을 위해 쉽게 추가할 수 있는 반면, 데이터베이스는 일반적으로 웹 아키텍처의 일부를 확장하는 데 가장 비용이 많이 들고 어렵습니다.

반대되는 예(예: Microsoft Sharepoint)도 있지만 일반적으로 파일을 데이터베이스에 저장하는 것은 좋지 않습니다.

데스크톱 앱을 작성하거나 사용자 수를 대략적으로 알지 못하는 경우, 공용 웹 사이트와 같이 무작위적이고 예상치 못한 것에 대해서는 데이터베이스에 파일을 저장하는 데 많은 비용을 지불할 수 있습니다.

SQL Server 2008으로 이동할 수 있는 경우 FILESTREAM 지원 기능을 활용하면 파일이 파일 시스템에 저장되지만 데이터베이스 통합 기능은 파일 경로를 바차 필드에 저장하는 것보다 훨씬 우수합니다.쿼리에서 표준 .NET 파일 스트림을 반환할 수 있으므로 통합이 훨씬 더 간단합니다.

FILESTREAM 스토리지 시작하기

상황에 따라 다르겠지만요예를 들어, 저는 지방자치단체에서 일하고 있고, 우리는 머그샷 등 많은 이미지를 가지고 있습니다.사용자 수가 많지는 않지만 데이터에 대한 보안 및 감사 기능이 우수해야 합니다.데이터베이스는 이를 더 쉽게 만들고 확장 문제에 직면하지 않기 때문에 우리에게 더 나은 솔루션입니다.

여기서 질문은 무엇입니까?

현대의 DBMS SQL 2008은 테이블에 고정되어 있는 BLOB를 처리하는 다양한 방법을 제공합니다.물론 찬반양론도 있고, 조금 더 깊이 생각해봐야 할 수도 있습니다.

고(?) 짐 그레이가 쓴 흥미로운 논문입니다.

BLOB에 연결할지 여부: 데이터베이스 또는 파일 시스템의 대용량 객체 스토리지

제 경험으로는, 파일을 파일로 저장하는 것이 항상 더 좋습니다.그 이유는 파일 시스템이 파일 저장에 최적화된 반면 데이터베이스는 그렇지 않기 때문입니다.물론 몇 가지 예외(예: 널리 알려진 차세대 MS 파일 시스템은 SQL 서버 위에 구축되어야 함)가 있지만 일반적으로 이것이 저의 규칙입니다.

성능도 중요하지만, 현대적인 데이터베이스 설계로 인해 작은 파일에 대한 문제가 훨씬 줄어들었다고 생각합니다.

성능은 차치하고 데이터가 얼마나 긴밀하게 결합되어 있는지에 따라 달라집니다.파일에 데이터베이스 필드와 밀접한 관련이 있는 데이터가 포함된 경우, 해당 파일은 개념적으로 데이터베이스 필드에 가깝기 때문에 블롭에 저장될 수 있습니다.데이터베이스가 여러 레코드와 관련될 수 있는 정보를 포함하거나 데이터베이스의 컨텍스트 밖에서 사용할 수 있는 경우, 해당 정보는 외부에 속합니다.예를 들어, 웹 페이지의 이미지는 링크되는 페이지와 별도의 요청에 따라 가져오기 때문에 특정 설계 및 보안 고려 사항에 따라 외부에 속할 수 있습니다.

최선의 방법은 아니지만 작은 XML 파일을 데이터베이스에 저장하고 이미지와 다른 파일을 데이터베이스 외부에 저장하는 것이었습니다.

성능 문제가 발생할 것으로 예상되는 http://www.freshlogicstudios.com/Products/Folders/ 에 대해 varbinary로 저장하기로 결정했습니다.저는 우리가 그것이 얼마나 잘 이루어졌는지에 대해 기쁘게 놀랐다고 말할 수 있습니다.

저는 @좀비의 말에 동의합니다.양. 한 가지만 더 있습니다. 일반적으로 DBMS 공급업체가 제공하는 모든 기능을 놓치기 때문에 데이터베이스가 실제로 이동식일 필요는 없다고 생각합니다.다른 데이터베이스로 마이그레이션하는 것은 고려할 수 없는 일이라고 생각합니다.그냥 내 0.02달러야.

블롭(이미지)을 바이트 배열로 구문 분석한 다음 적절한 파일 이름으로 디스크에 쓴 다음 이를 읽어야 하는 오버헤드는 특히 파일이 큰 경우 오버헤드 히트를 너무 자주 수행하지 못하게 하기에 충분합니다.

애매모호하거나 그런 것은 아니지만, 저는 당신이 저장할 '파일'의 종류가 가장 큰 결정적인 요소 중 하나 생각합니다.기본적으로 파일로 저장할 수 있는 큰 텍스트 필드에 대해 말씀하신다면 제가 선호하는 것은 db 저장입니다.

흥미로운 주제입니다.

이 질문에 대한 정답은 하나도 없습니다.

고려해야 할 주요 요소는 다음과 같습니다.

  • 데이터베이스 엔진은 무엇입니까?
  • 데이터베이스에서 최종 사용자 및/또는 이전 버전으로 파일이 이동하는 경로는 무엇입니까?
  • 보안 요구사항은 무엇입니까?

파일이 일반 사용자를 위한 것이고 웹 사이트를 통해 액세스할 수 있는 경우에는 파일을 데이터베이스에 저장할 필요가 없습니다.대신 파일에 스마트 인덱싱을 사용합니다.

파일에 매우 중요한 정보가 포함되어 있는 경우 데이터베이스에 저장할 수 있습니다.하지만 적절한 안전한 게이트웨이도 구현해야 합니다.

성능이 중요한 경우에는 파일을 데이터베이스에 저장하지 않는 것이 좋습니다.

파일 때문에 데이터베이스가 커지면 데이터베이스 백업, 복원 및 마이그레이션이 악몽이 될 수 있습니다.DBA인 경우 파일을 데이터베이스에 저장하는 아이디어를 "발명"한 사용자를 죽이려 합니다.

더 이상 사용할 수 있는 대안이 없는 경우 마지막으로 파일을 데이터베이스에 저장하는 것이 좋습니다.

언급URL : https://stackoverflow.com/questions/8952/storing-a-file-in-a-database-as-opposed-to-the-file-system

반응형