[논문 리뷰] To BLOB or Not To BLOB: Large Object Storage in a Database or a Filesystem?
이 논문은 장기적인 운영 성능과 관리 용이성에 중점을 두고, 데이터베이스(BLOB로 저장)와 파일시스템 간의 대용량 객체 저장 간의 성과를 분석한다. '저장 연령'(저장된 객체의 덮어쓰기 횟수로 정규화된 지표)을 도입하여, 256KB 이하의 객체는 데이터베이스에서, 1MB 초과의 객체는 파일시스템에서 가장 우수한 성능를 보이며, 256KB에서 1MB 사이의 중간 영역에서는 읽기:쓰기 비율과 덮어쓰기 빈도가 결정적인 요소가 된다고 밝힌다.
Application designers often face the question of whether to store large objects in a filesystem or in a database. Often this decision is made for application design simplicity. Sometimes, performance measurements are also used. This paper looks at the question of fragmentation - one of the operational issues that can affect the performance and/or manageability of the system as deployed long term. As expected from the common wisdom, objects smaller than 256KB are best stored in a database while objects larger than 1M are best stored in the filesystem. Between 256KB and 1MB, the read:write ratio and rate of object overwrite or replacement are important factors. We used the notion of "storage age" or number of object overwrites as way of normalizing wall clock time. Storage age allows our results or similar such results to be applied across a number of read:write ratios and object replacement rates.
연구 동기 및 목표
- 장기적인 운영 성능과 관리 용이성에 기반해 대용량 객체 저장 전략을 데이터베이스(BLOB) 또는 파일시스템 중에서 최적화하는 데 목적이 있다.
- 시간이 지남에 따라 시스템 성능에 영향을 미치는 핵심 운영 문제인 분할(fragmentation)을 다루는 데 목적이 있다.
- 다양한 워크로드와 배포 환경 간의 성능 비교를 가능하게 하는 정규화 지표를 개발하는 데 목적이 있다.
- BLOB 또는 파일시스템 저장 방식 중 어느 것이 더 효율적인지 결정하는 크기 기준과 워크로드 특성을 규명하는 데 목적이 있다.
- 응용 프로그램 설계자가 대용량 객체 저장을 위해 데이터베이스와 파일시스템 중 어떤 것을 선택할지에 대한 데이터 기반의 지침을 제공하는 데 목적이 있다.
제안 방법
- 객체의 덮어쓰기 횟수로 정의된 '저장 연령'을 도입하여, 다양한 워크로드 간 성능 추세 비교를 가능하게 하는 정규화된 시간 지표를 제공한다.
- 다양한 객체 크기(256KB에서 1MB까지)와 워크로드에서 I/O 성능, 분할, 저장 효율성 측정을 위한 통제된 실험을 수행한다.
- 읽기:쓰기 비율과 객체 교체 빈도를 다양하게 설정하여, SQL Server와 같은 데이터베이스와 NTFS와 같은 파일시스템 간의 성능을 평가한다.
- 객체 덮어쓰기 영향을 분리하기 위해 저장 연령으로 정규화된 벽시계 시간을 사용한다.
- 장기적인 관리 용이성과 확장성 평가를 위해 분할 및 저장 효율성 지표를 분석한다.
- 다양한 액세스 패턴과 객체 라이프사이클 행동을 시뮬레이션하여 실제 워크로드에 결과를 적용한다.
실험 결과
연구 질문
- RQ1어느 크기의 객체에서 파일시스템 저장이 데이터베이스 BLOB 저장보다 더 효율적인가?
- RQ2읽기:쓰기 비율과 객체 덮어쓰기 빈도는 대용량 객체 저장의 성능과 분할에 어떤 영향을 미치는가?
- RQ3'저장 연령'과 같은 정규화 지표가 다양한 워크로드와 배포 환경 간의 저장 성능 비교에 효과적으로 활용될 수 있는가?
- RQ4장기적인 운영 영향 측면에서, 대용량 객체를 데이터베이스에 저장하는 것과 파일시스템에 저장하는 것 간의 차이점은 무엇이며, 특히 분할과 관리 용이성 측면에서 어떤 영향을 미치는가?
- RQ5256KB에서 1MB 사이의 중간 크기 범위에서는 성능 특성이 어떻게 변화하는가? 이 범위에서는 어느 솔루션도 명백하게 우월하지 않기 때문이다.
주요 결과
- 256KB 이하의 객체는 트랜잭션 무결성과 낮은 I/O 오버헤드 덕분에 항상 데이터베이스 BLOB로 저장할 경우 더 우수한 성능를 보인다.
- 1MB 초과의 객체는 데이터베이스 BLOB 저장 방식이 더 높은 오버헤드와 분할을 유발하므로, 파일시스템에 저장하는 것이 더 효율적이다.
- 256KB에서 1MB 사이에서는 읽기:쓰기 비율과 객체 덮어쓰기 빈도에 따라 최적의 선택이 달라지며, 높은 쓰기 빈도는 파일시스템을 선호한다.
- 객체의 덮어쓰기 횟수로 정의된 '저장 연령'은 다양한 워크로드 간 일관된 성능 비교를 가능하게 하는 강력한 정규화 지표이다.
- 특히 256KB에서 1MB 사이 범위에서 고도의 덮어쓰기 워크로드가 적용될 경우, 데이터베이스 BLOB 저장 방식에서 분할이 크게 증가하여 시간이 지남에 따라 성능이 떨어진다.
- BLOB 저장 방식에 비해 파일시스템 저장은 고도의 쓰기 및 덮어쓰기 워크로드에서 더 나은 장기적 관리 용이성과 낮은 성능 저하를 보인다.
더 나은 연구,지금 바로 시작하세요
연구 설계부터 논문 작성까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.