Realm 파일 크기 줄이기 - .NET SDK
개요
시간이 지남에 따라 Realm에서 사용하는 저장 공간이 조각화되어 필요한 것보다 더 많은 공간을 차지할 수 있습니다. 내부 저장소를 재정렬하고 잠재적으로 파일 크기를 줄이려면 영역 파일을 압축해야 합니다.
Realm의 기본 동작은 Realm 파일이 너무 커지는 것을 방지하기 위해 자동으로 압축하는 것입니다. 사용 사례에 자동 압축이 충분하지 않은 경우 수동 압축 전략을 사용할 수 있습니다.
자동 압축
버전 10.20.0의 새로운 기능
SDK는 파일 내 데이터를 지속적으로 재할당하고 사용하지 않는 파일 공간을 제거하여 백그라운드에서 자동으로 Realm 파일을 압축합니다. 자동 압축은 대부분의 애플리케이션에서 Realm 파일 크기를 최소화하는 데 충분합니다.
파일에서 사용되지 않은 공간이 파일의 사용자 데이터 크기의 두 배 이상일 때 자동 압축이 시작됩니다. 자동 압축은 파일에 액세스하지 않을 때만 수행됩니다.
수동 압축 옵션
수동 압축은 보다 엄격한 파일 크기 관리가 필요한 애플리케이션이나 자동 압축을 지원하지 않는 이전 버전의 SDK를 사용하는 애플리케이션에 사용할 수 있습니다.
Realm은 파일의 새 (컴팩트) 버전을 작성한 다음 원본을 새로 작성된 파일로 대체하여 파일 크기를 줄입니다. 따라서 압축하려면 원래 Realm 파일 크기와 동일한 저장 공간이 있어야 합니다.
Realm이 열릴 때마다 데이터베이스를 자동으로 압축하도록 Realm을 구성하거나 먼저 Realm 인스턴스를 가져오지 않고 파일을 압축할 수 있습니다.
Realm 구성 파일
구성에서 ShouldCompactDelegate 를 지정하여 영역 파일 이 열릴 때마다 확인하도록 Realm 을 구성할 수 있습니다. 다음 코드 예시 에서는 이 작업을 수행하는 방법을 보여 줍니다.
config = new RealmConfiguration() { ShouldCompactOnLaunch = (totalBytes, usedBytes) => { /* totalBytes refers to the size of the file on disk in * bytes (data + free space). * usedBytes refers to the number of bytes used by * the realm file */ // Compact if the file is over 100MB in size and less // than 50% 'used' var oneHundredMB = 100 * 1024 * 1024; return (totalBytes > (double)oneHundredMB) && ((double)usedBytes / totalBytes < 0.5); } }; var realm = await Realm.GetInstanceAsync(config);
위임이 true
을(를) 반환하고 파일이 사용 중이 아닌 경우, 인스턴스를 사용할 수 있도록 하기 전에 영역 파일이 압축됩니다.
Realm.Compact() 메서드
또는 Compact() 메서드를 호출하여 영역 에 대한 인스턴스 를 먼저 가져오지 않고 영역 파일 을 압축할 수 있습니다. 다음 예시 는 이를 수행하는 방법을 보여줍니다.
config = new RealmConfiguration("my.realm"); Realm.Compact(config);
작업이 성공하면 Compact
메서드는 true를 반환합니다.
Realm 수동 압축 팁
Realm을 수동으로 압축하는 것은 리소스 집약적인 작업일 수 있습니다. Realm을 열 때마다 애플리케이션이 압축되어서는 안 됩니다. 대신 압축을 최적화하여 파일 크기가 너무 커지지 않도록 애플리케이션이 충분히 자주 압축을 수행하도록 합니다. 애플리케이션이 리소스가 제한된 환경에서 실행되는 경우 특정 파일 크기에 도달하거나 파일 크기가 성능에 부정적인 영향을 미치는 경우 압축할 수 있습니다.
이러한 권장 사항은 애플리케이션에 대한 압축 최적화를 시작하는 데 도움이 될 수 있습니다.
최대 파일 크기를 평균 영역 상태 크기의 배수로 설정합니다. 평균 영역 상태 크기가 10 MB인 경우 예상 사용량과 기기 제약 조건에 따라 최대 파일 크기를 20 MB 또는 40 MB로 설정할 수 있습니다.
우선, 영역 파일 크기의 50% 이상이 더 이상 사용되지 않는 경우 영역을 압축합니다. 현재 사용 중인 바이트를 전체 파일 크기로 나누어 현재 사용 중인 공간의 비율을 확인합니다. 그런 다음 그 비율이 50% 미만인지 확인합니다. 즉, 영역 파일 크기의 50% 이상이 사용되지 않는 공간이라는 의미이므로 압축하는 것이 좋습니다. 실험을 통해 애플리케이션에 가장 적합한 비율을 찾을 수 있습니다.
이러한 계산은 위임에서 다음과 같이 표시될 수 있습니다.
// Set a maxFileSize equal to 20MB in bytes var maxFileSize = 20 * 1024 * 1024; /* Check for the realm file size to be greater than the max file size, * or the amount of bytes currently used to be less than 50% of the * total realm file size */ return (totalBytes > (double)maxFileSize) && ((double)usedBytes / totalBytes < 0.5);
여러 조건을 실험하여 애플리케이션에서 영역 파일을 압축하는 빈도에 대한 적절한 균형을 찾아보세요.