我正在考慮使用兩個persistent store coordinator
,PSC1
會只讀一個SQLite DB
,PSC2
將讀寫DB
。有時PSC1
將從DB
重新加載內容。兩個NSPersistentStoreCoordinator可以使用相同的數據庫嗎?
你認爲這是可能的嗎?
您是否認爲兩個PSC可以以原子方式讀取/寫入數據庫,而不會導致任何損壞?
PSC是否對數據庫設置了鎖定,以便從其他PSC進行訪問?
我正在考慮使用兩個persistent store coordinator
,PSC1
會只讀一個SQLite DB
,PSC2
將讀寫DB
。有時PSC1
將從DB
重新加載內容。兩個NSPersistentStoreCoordinator可以使用相同的數據庫嗎?
你認爲這是可能的嗎?
您是否認爲兩個PSC可以以原子方式讀取/寫入數據庫,而不會導致任何損壞?
PSC是否對數據庫設置了鎖定,以便從其他PSC進行訪問?
您可以有兩個不同的NSPersistentStoreCoordinator
實例訪問相同的文件。事實上,多年前這是一個推薦的方法。
但是,這樣做有問題。如果一個NSPersistentStoreCoordinator
發生了寫入文件系統的更改,另一個NSPersistentStoreCoordinator
實例將不知道它。 NSPersistentStoreCoordinator
和NSManagedObjectContext
維護它們管理的對象的內存狀態。使用兩個NSPersistentStoreCoordinator
實例會導致它們在某個時刻不同步。例如,如果NSPersistentStoreCoordinator
A從NSPersistentStore
中的記錄加載對象,則會有該對象的內存版本。如果NSPersistentStoreCoordinator
B然後刪除由相同記錄支持的對象,則A的對象版本沒有記錄。當Core Data試圖在A中對該對象進行故障時,您將得到一個異常。
您是否認爲兩個PSC可以以原子方式讀取/寫入DB,而不會導致任何損壞?
損壞對於NSSQLiteStoreType商店來說很少出現問題。與其他商店,這當然是可能的。
PSC是否對數據庫設置了鎖定,以便從其他PSC進行訪問?
內置的NSPersistentStore
具體類我們在訪問文件系統的記錄(但不總是用於元數據)時協調文件。所以是的,有一個鎖涉及到,它應該防止兩個NSPersistentStore
實例同時修改相同的文件。
如上所述,這不是你應該關心的問題。使用多個協調器時,協調員的內存狀態及其上下文是一個更加緊迫的問題。
沒有嘗試過,但我認爲它可以使用NSReadOnlyPersistentStoreOption。結帳https://developer.apple.com/library/mac/documentation/Cocoa/Reference/CoreDataFramework/Classes/NSPersistentStoreCoordinator_Class/index.html#//apple_ref/doc/constant_group/Store_Options – JakubKnejzlik
您可能會對[此方法]感興趣, (http://martiancraft.com/blog/2015/03/core-data-stack/),它使用2個'NSManagedObjectContext's。 – johnpatrickmorgan
您可能想要展開爲什麼要這樣做。你想要的最後一件事是不必要地過度優化你的核心數據棧。我很想看看你目前看到了什麼樣的表現,以及爲什麼你認爲你需要協調員來提高這一點。 –