簡體   English   中英

CoreData多對多關系的慢插入

[英]Slow inserts for CoreData many-to-many relationship

我有兩個模型,它們之間存在多對多關系。 模型A以空狀態啟動,而模型B約有220k記錄(索引很大,但這不會影響,因為該模型從未更新)。

A-> B中的一對多如下:

  • 可選=>否
  • 瞬變=>假
  • 索引=> true
  • 有序=> true
  • minCount => 0
  • maxCount => NSIntegerMax
  • deleteRule => NSCascadeDeleteRule

B-> A的一對多如下:

  • 可選=> true
  • 瞬變=>假
  • 索引=>否
  • 有序=>假
  • minCount => 0
  • maxCount => NSIntegerMax
  • deleteRule => NSNullifyDeleteRule

當然,每個關系都設置為彼此相反。 我面臨的問題如下:在創建新的實體A之前,該應用程序執行獲取請求,該請求將獲取約2k條實體B的記錄。然后,該應用程序將這些記錄設置為要創建的實體A,然后保存上下文。 問題是將2k條記錄的nsorderedset設置為實體在同一台設備上,實例在裝有iOS 6.0.1的iPhone 4S中花費4秒或更多,而保存上下文花費了4秒或更多。 這需要8秒鍾來創建模型A的新實例。

我嘗試過在模型A中啟用/禁用索引關聯屬性,但這並沒有什么不同。 我要完成的任務這么重?

通過進行一些測試,我觀察到將nsorderedset設置為實體A實例的大部分時間是由於逆關系。 我進行了快速測試,將目標模型中的多對多關系更改為無逆關系的對多關系,然后插入時間減少到一半。 當然,這打破了多對多關系。 這只是一個快速測試。

我在這里想念什么嗎? 由於該應用程序僅一次保存上下文,而不是每條記錄B一次保存上下文,因此保存2k條記錄應該花很長時間,但是我是iPhone開發的新手,也許我正在執行的任務是對於這種設備來說太多了。

任何提示將不勝感激。 謝謝!

費德夫

感謝您提出的書面問題。 很明顯,您在尋求幫助之前已經仔細考慮了自己的問題。 這對所有人都有幫助。

保存時,核心數據似乎不使用塊操作。 因此,您將在那里遇到性能問題。 但是,關系設置應該比您看到的要快。(順便說一句,大多數性能問題是由閃存的速度驅動的。在iOS設備上速度很慢。因此,預取以使MOC與數據保持同步很重要。批量獲取很重要。)

我提出幾點意見:

為什么A-> B對多關系同時被索引和排序? 訂購將減慢您的插入速度。 為關系建立索引是否也有意義?

您是否正在使用批量關系設置器( -add<Key>:

在將它們設置為實體A實例之前,是否要獲取所有2000條實體B記錄?

即使這不影響插入性能,為什么從A-> B級聯刪除規則呢? 您在實體B上方書寫的內容不變。

安德魯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM