2010-01-20 85 views
2

我熟悉Core Data的基礎知識,並且已經做了一些涉足,但還沒有真正做過任何主要的應用程序。現在我需要爲一個計劃。問題不是關於核心數據,而是關於數據設計的一般問題,儘管我將使用核心數據在iPhone上實現,這對於考慮性能很重要。核心數據模型設計 - 搜索與關係?

想象一下,我製作了一個電子郵件應用程序,其中電子郵件是核心對象。我需要在電子郵件存儲中提供多個視圖:按用戶搜索以及其他許多條件:例如,「包含兩個以上收件人的所有電子郵件」,「主題長於X的所有電子郵件」,「包含字X的所有電子郵件「等。

某些對象,如人(發件人/收件人),自然適合作爲一流對象建模,所以我可以做到這一點,只需創建人與電子郵件之間的多對多關係即可。其他搜索,比如上面的一些例子,更爲人爲,並沒有自然的方式來對它們進行建模。但是,我可以提前列舉新的搜索,即事先知道什麼是標準。

所以,做這樣的事情和「電子郵件,其中主體是比X長」,「與> 2個收件人電子郵件」,我想我有兩個策略:

1)模型中,這些作爲一種特殊的「搜索」對象,並且在將新對象插入商店時創建電子郵件和搜索對象之間的多對多關係,因此它在搜索時是一個簡單的連接查詢;

2)沒有對核心電子郵件對象之外的任何東西進行建模,只是在運行時用商店中的謂詞進行搜索。

我的問題是:

根據您的核心數據的本能,有多大是從性能的角度來看這兩種策略的區別?我的直覺告訴我,#1總是會更快,但如果它是10%,我願意採取性能命中的方式,以便在#2時更加靈活。但是,如果#2的速度會降低200%,那麼我需要投入更多精力來對搜索對象進行建模,並基本上預先生成所有搜索結果。

我知道確切的答案將取決於具體的數據,但必須有一種直覺,你有:)讓我們說有數以萬計,但不是數百萬的內容對象,每個記錄是包含幾個元數據字段的幾段內容文本。

回答

2

通常情況下,如果您在測試過程中遇到性能問題,我建議您使用策略2並花時間研究和開發其他技術。核心數據通常比人們認爲特別是在iPhone上更快。

但是,如果您能夠提前確定所有可能的搜索,那確實會給您帶來好處。這聽起來像是在創建電子郵件時,您會檢查它並將其添加到所有適當的「搜索」對象。我的直覺是,策略之一會顯着加快,特別是在數以萬計的電子郵件對象中。

+1

我同意gerry3,並進一步補充說,您可以在開發過程中添加搜索,只要您具有適當的數據模型並可以測試其性能。您可以創建一個「測試」數據庫,其數據量比您期望應用程序處理的數據量多一個數量級,然後對其進行測試以揭示任何性能問題。 – 2010-01-21 01:19:07