programing

이미지를 데이터베이스에 직접 저장하시겠습니까, 아니면 Base64 데이터로 저장하시겠습니까?

javaba 2022. 9. 16. 22:42
반응형

이미지를 데이터베이스에 직접 저장하시겠습니까, 아니면 Base64 데이터로 저장하시겠습니까?

입니다.base64데이터를 저장하기 전에 데이터를 저장하십시오.이 프로세스에서는 사이즈가 33% 증가합니다. 이미지를 a a a a a a a a a a a a a a 로 저장할 수도 .BLOB ::

$image = new Imagick("image.jpg");
$data = $image->getImageBlob();
$data = $mysqli->real_escape_string($data);
$mysqli->query("INSERT INTO images (data) VALUES ('$data')");

이미지를 표시합니다.

<img src="data:image/jpeg;base64,' .  base64_encode($data)  . '" />

후자의 방법에서는 스토리지 공간을 1/3 절약할 수 있습니다.에 더 는 무엇입니까?base64MySQL 데 my my my my my my my my my my?

업데이트: 데이터베이스에 이미지를 저장하는 것의 장점과 단점에 대해서는 많은 논쟁이 있습니다.대부분의 사람들은 이것이 실용적인 접근법이 아니라고 생각합니다.어쨌든, 여기에서는, 이미지를 데이타베이스에 격납해, 최적인 방법에 대해 논의한다고 생각합니다.

이미지(파일)는 통상 데이터베이스 base64에 부호화 되어 있지 않다.대신 원시 이진 형식으로 이진(블럽) 열 또는 파일에 저장됩니다.

Base64는 전송 메커니즘으로만 사용되며 저장에는 사용되지 않습니다.예를 들어 Base64 인코딩된 이미지를 XML 문서 또는 전자 메일 메시지에 포함할 수 있습니다.

Base64도 스트림 프렌들리입니다.데이터의 총 크기를 몰라도 즉시 인코딩 및 디코딩할 수 있습니다.

base64는 전송에 문제가 없지만 base64로 인코딩된 이미지를 저장하지 마십시오.

Base64는 스토리지에 체크섬 등의 가치를 제공하지 않습니다.

Base64 인코딩은 원시 바이너리 포맷에 비해 스토리지 요건을 33% 증가시킵니다.또한 일반적으로 여전히 컴퓨팅에서 가장 큰 병목 현상인 영구 스토리지에서 읽어야 하는 데이터 양도 증가합니다.일반적으로 더 적은 바이트를 읽고 즉시 인코딩하는 것이 더 빠릅니다.시스템이 IO 바인딩 대신 CPU 바인딩되어 있고 이미지를 정기적으로 base64로 출력하는 경우에만 base64에 저장하는 것을 고려하십시오.

인라인 이미지(HTML에 내장된 Base64 부호화 이미지)는 그 자체가 병목 현상입니다.회선을 통해 33% 더 많은 데이터를 전송하고 연속적으로 실행합니다(웹 브라우저는 HTML 페이지 다운로드를 완료하기 전에 인라인 이미지를 기다려야 합니다).

그래도 base64 인코딩된 이미지를 저장하려면 base64 인코딩된 데이터를 UTF8 열에 저장하지 말고 인덱스를 작성하십시오.

  • Pro base64: 취급하는 부호화된 표현은 매우 안전한 문자열입니다.컨트롤 문자도 따옴표도 포함되어 있지 않습니다.후자는 SQL 주입 시도에 도움이 됩니다.단순히 "수동으로 코딩된" SQL 쿼리 문자열에 값을 추가하는 것은 문제가 되지 않습니다.

  • Pro BLOB: 데이터베이스 매니저 소프트웨어는 예상되는 데이터 유형을 파악합니다.그에 맞게 최적화할 수 있습니다.TEXT 필드에 base64를 저장하는 경우 인덱스나 기타 데이터 구조를 구축하려고 할 수 있습니다.이것은 "실제" 텍스트 데이터에는 매우 유용하지만, 이미지 데이터에는 시간과 공간을 낭비하는 것입니다.또한 바이트 수에서와 같이 더 작은 표현입니다.

예를 들어 파일이나 CDN이 아닌 DB에 이미지를 저장하기로 한 이유를 설명하자면, 시그니처의 이미지를 저장하고 있습니다.

CDN, 클라우드 스토리지, 파일을 통해 이러한 작업을 수행하려고 노력했으며, 최종적으로 DB에 저장하기로 결정했으며, 이후 이동, 스크립트 업그레이드 및 사이트 서버 마이그레이션 시 올바른 결정임이 입증되었습니다.

제 경우, 서명이 문서 작성자의 기록과 함께 있기를 원했습니다.

파일 형식으로 저장하면 파일이 누락되거나 실수로 삭제될 위험이 있습니다.

MySQL에서는 blob binary 형식으로 저장하고, 이후에는 based64 encoded 이미지로 텍스트 필드에 저장합니다.based64로 변경하게 된 것은 어떤 이유로 인해 크기가 작아지고 로딩이 빨라졌기 때문입니다.BLOB는 어떤 이유로 페이지 로드를 늦추고 있었다.

이 경우 시그니처 이미지를 DB(BLOB 또는 based64)에 저장하기 위한 솔루션은 다음과 같습니다.

  1. 대부분의 시그니처 이미지는 매우 작습니다.
  2. DB에 저장된 시그니처 이미지를 인덱싱할 필요가 없습니다.
  3. 인덱스는 프라이머리 키로 실행됩니다.
  4. 물리 이미지 파일을 다른 서버로 이동하거나 서버를 전환해야 하는 경우 링크 변경으로 인해 이미지를 찾을 수 없는 경우가 있습니다.
  5. 저자에게 서명을 다시 해달라고 부탁하는 것은 부끄럽다.
  6. 보안이 손상된 경우 다운로드할 수 있는 파일로 노출하는 것보다 DB에 저장하는 것이 더 안전합니다.DB에 저장하면 액세스를 보다 효과적으로 제어할 수 있습니다.
  7. 향후의 이행, Web 설계 변경, 호스팅, 서버 등, 서명 파일명을 물리 파일과 대조하는 것에 대한 염려가 없습니다.이 모든 것은 DB에 저장되어 있습니다.

AC

NoSQL과 같은 최신 데이터베이스를 볼 것을 권장합니다.또한 사용자1252434의 투고에도 동의합니다.예를 들어 500kb 미만의 PNG를 base64로 Mongo db에 저장하고 바이너리를 true로 설정하여 퍼포먼스에 전혀 영향을 주지 않습니다.Mongo는 10MB 비디오와 같은 대용량 파일을 저장할 수 있으며, 이러한 비디오의 메타데이터 검색에서 시간을 크게 절약할 수 있습니다. mongodb에 대용량 개체와 파일을 저장하는 것을 참조하십시오.

언급URL : https://stackoverflow.com/questions/9722603/storing-image-in-database-directly-or-as-base64-data

반응형