Tại phiên WWDC 2013 '207: Có gì mới trong dữ liệu cốt lõi', họ đề cập rằng bạn có thể bật SQLite WAL bằng cách chuyển từ điển tùy chọn khi thêm lưu trữ liên tục:iOS CoreData - có bất kỳ nhược điểm nào khi kích hoạt tính năng sqlite WAL/Write-Ahead Logging
@{ NSSQLitePragmasOption: @"journal_mode = WAL" }
(có sẵn trên iOS4 + và sẽ là mặc định cho các phiên bản iOS trong tương lai).
Tôi tự hỏi liệu điều này nói chung sẽ là một điều tốt để bật trong ứng dụng của tôi cho các phiên bản iOS cũ hơn.
Tôi đã tham khảo ý kiến SQLite page about write ahead logging và những nhược điểm họ đề cập, hầu hết trong số họ dường như không áp dụng cho iOS ngoài:
- WAL có thể rất hơi chậm (có lẽ 1% hoặc 2% chậm hơn) hơn phương pháp tiếp cận rollback-journal truyền thống trong các ứng dụng chủ yếu là đọc và ít khi viết.
khá nhiều tất cả những ưu điểm làm âm thanh như họ có thể sẽ là một lợi ích trên iOS:
- WAL là đáng kể nhanh hơn trong hầu hết các tình huống.
- WAL cung cấp đồng thời hơn vì người đọc không chặn nhà văn và người viết không chặn người đọc. Đọc và viết có thể tiến hành đồng thời.
- Hoạt động I/O đĩa thường có xu hướng tuần tự hơn bằng cách sử dụng WAL.
- WAL sử dụng nhiều thao tác fsync() ít hơn và do đó ít dễ bị tổn thương hơn đối với các sự cố trên hệ thống mà cuộc gọi hệ thống fsync() bị hỏng.
Tôi đang chuẩn bị (có thể phải thực hiện một số kiểm tra trên ứng dụng của mình để đảm bảo rằng nó không làm chậm công việc), đây là một điều tốt để kích hoạt, nhưng có bất kỳ nhược điểm nào tôi nên xem hoặc bất kỳ vấn đề đã biết nào?
Tôi nên lưu ý rằng điều này chỉ xảy ra trong quá trình di chuyển "nâng cao" khi bạn cần Trình quản lý di chuyển. Di chuyển ít triệt để hơn (như thêm hoặc đổi tên một cột) sẽ hoạt động tốt, vì chúng được thực hiện trên cùng một cơ sở dữ liệu chứ không phải trong một bản sao. – pgb
@pgb đó là điều tốt để biết, cảm ơn bạn đã làm rõ! – JosephH
Bạn không thể tạm thời vô hiệu hóa WAL, xóa tạp chí (tập tin -wal), và sau đó thực hiện di chuyển ...? – CommaToast