Tôi đang sử dụng iCloud với Dữ liệu cốt lõi, dựa trên thiết kế ứng dụng "Thư viện kiểu" SQLite theo quy định của Apple. Trong khi chức năng cơ bản hoạt động rất tốt, tôi quan tâm đến nhật ký giao dịch và cách chúng được quản lý.Quản lý dữ liệu lõi Bản ghi giao dịch iCloud
Trong khi cơ sở dữ liệu cho ứng dụng của tôi không lớn, nó rất hoạt động và ngăn xếp dữ liệu lõi được lưu nhiều lần trong khi ứng dụng đang được sử dụng. Tôi đã nhận thấy rằng nhật ký giao dịch mới được tạo để lưu mỗi dữ liệu cốt lõi. Kết quả cuối cùng là tôi có một TON nhật ký giao dịch và chúng chiếm nhiều không gian hơn so với cơ sở dữ liệu thực tế.
1) Các nhật ký giao dịch có được tự động cắt xén/coalesced hay chúng sẽ tiếp tục phát triển vô thời hạn, cuối cùng đánh số hàng nghìn và chiếm nhiều megabyte? Dường như cách duy nhất để thanh lọc thủ công nhật ký giao dịch và tạo lại tệp lưu trữ .baseline sẽ là tắt và sau đó bật lại iCloud (xóa vùng chứa phổ biến và bắt đầu mới). Nhưng điều này rõ ràng không phải là một giải pháp tốt.
2) Cấu trúc hiện tại của tôi lưu trữ dữ liệu lõi thường xuyên, ngay cả đối với những thay đổi nhỏ. Nói chung, điều này có ý nghĩa vì cơ sở dữ liệu của tôi nhỏ và tiết kiệm thường xuyên đảm bảo rằng tệp cơ sở dữ liệu luôn được cập nhật. Tuy nhiên, với các vấn đề trên với nhật ký giao dịch, tôi nghĩ rằng có lẽ tôi nên giảm thiểu tối đa việc lưu vào cơ sở dữ liệu. Có thể làm như vậy trên cơ sở theo thời gian và/hoặc trạng thái chuyển đổi ứng dụng.
3) Ngay cả khi tôi giảm thiểu số lượng nhật ký giao dịch bằng cách giảm tần suất tôi lưu cơ sở dữ liệu, có vẻ như có vấn đề ở đây, vì nhật ký sẽ tiếp tục tăng theo thời gian. Cuối cùng, lợi ích của thiết kế "nhật ký giao dịch" sẽ trở thành gánh nặng về lượng lưu trữ iCloud được sử dụng và đồng bộ iCloud ban đầu như một thiết bị mới được thêm vào.
Vì Apple đã cung cấp thông tin rất thưa thớt trên iCloud và hầu như không có gì dưới dạng "thực tiễn tốt nhất", tôi sẽ đánh giá cao bất kỳ thông tin chi tiết nào từ cộng đồng.
Tôi nghĩ đây là một câu hỏi hay, nhưng tôi khuyên bạn nên đặt câu hỏi này trong Diễn đàn nhà phát triển Apple để bạn có thể nhận phản hồi từ các kỹ sư thực sự thiết kế và phát triển điều này. Họ có thể yêu cầu bạn cung cấp phản hồi cụ thể dưới dạng báo cáo lỗi/yêu cầu tính năng. –