0

Core Data entity diagram增強我的核心數據設計。只有專家!

AcaniUsers,我下載的最近20個用戶,我和展示他們的個人資料照片在表視圖縮略圖。用戶&照片都是資源,因爲它們在服務器上都有一個id(MongoDB BSON ObjectId)。每個用戶都有一個unique_id。每張照片在服務器上有四種不同的尺寸(圖像):方形:75x75,方形@ 2x:150x150,大:320x480,大@ 2x:640x960。但是,每個設備只有兩種尺寸,具體取決於它是iPhone 3還是4(視網膜顯示屏)。每種尺寸都有自己的MongoDB集合。而且,每張照片的所有四張圖像在這四個集合中都具有相同的BSON ObjectId。

未來,我可能會給用戶一個叫做photos的關係,以允許用戶擁有多張照片。另外,雖然我沒有預見到這一點,但我可以添加更多的圖像大小(類型)。

fresh屬性Image告訴我我是否下載了最新的Image。每當Photo的ID發生變化時,我將其設置爲NO,然後在完成下載映像後返回到yes。

  1. 我應該將四個不同的圖像存儲在覈心數據還是文件系統中,並將它們的URL存儲在覈心數據中?我讀過1或2MB以上的地方,你應該存儲在文件系統中,而不是核心數據。所以,我正在考慮將核心數據中的方形圖像和文件系統中的大圖像存儲起來,但我寧願將它們存儲在一起以使事情更容易。那麼,也許我只是將它們全部存儲在文件系統中?你怎麼看?

  2. 您是否認爲我應該丟棄75x75 & 320x480尺寸,因爲很快iPhone 3將會消失?

  3. 如何改進我對實體的設計,以及它們的屬性和關係。例如,資源實體是否有益呢?

  4. 我使用NSFetchedResultsController顯示用戶。但是,它不知道用戶圖像何時更新,因此只有在我第一次積極滾動時纔會顯示圖像。我如何讓NSFetchedResultsController知道用戶的縮略圖已經完成下載?我必須使用KVO嗎?

回答

1

回答您的問題:

1我想他們都存儲在文件系統,並記錄在數據庫中的URL。我從來沒有把圖像數據存儲在數據庫中。此外,它會簡化一些操作,使所有圖像存儲均勻。這樣在你的圖片加載代碼中,你不必擔心它是存儲在數據庫還是存儲在文件系統中的類型。

2不,我不會那樣做。 iPhone 3將會延長一段時間。 ATT仍然將它們作爲廉價的入門級iPhone銷售。那天晚上我剛看到一則廣告以49美元的價格廣告。

3刪除Resources條目並將id屬性添加到每個類。你如何做到這一點實際上是不好的。抽象實體只能在你有幾個幾乎相同的實體時才使用,並且只有它們之間的一些差異。在覈心數據下,核心數據只會爲抽象實體及其所有子項創建一張表。所以現在你最終只會得到一張包含用戶和照片條目的表格,這些條目在你試圖查詢實體類型時可能很糟糕。

您還應該刪除圖像實體並將其屬性移動到Photo實體中。照片將始終具有與其相關的值,並且照片之間不會共享相同的值。將它們作爲一個獨立的實體會導致速度放慢。您可能需要加載需要加入的照片(較慢),或者在訪問數據或速度較慢的新屬性時一次加載一張照片。在後一種情況下,每個故障都被觸發時,每個對象都會發生單獨的查詢和往返磁盤的往返行程。所以當你循環顯示你的圖片時,你會發出n個查詢,而不是一個可能在性能上有很大差異的查詢。

4您可以使用KVO來做到這一點。讓您的表格單元格觀察者爲用戶或圖片(取決於您是否已將圖片添加到用戶並正在更改數據,或者是否在加載完成時向用戶添加新圖片)。當觀察者被觸發時,更新正在顯示的圖像。