2012-10-09 124 views
1

我正在創建一個處理房地產列表的iOS應用程序。目前的結構如下:用於存儲大量記錄的應用程序結構

  1. 設備聯繫人服務器並下載包含服務器上次每條記錄被修改目前所有的記錄ID的索引文件。

  2. 設備上的每個核心數據記錄都會根據索引文件進行檢查: a)記錄是最新的,沒有任何反應。 b)記錄已過期,從設備中刪除並從服務器重新加載。 c)記錄不是索引文件的一部分,並從設備中刪除。 d)使用列表ID的設備上找不到記錄,並從服務器下載。

我使用索引文件,因爲我只需要下載每個記錄的一小部分數據以便比較。

我的問題是這樣的,我目前有大約1250測試記錄在服務器上。使用當前設置,需要將近3分鐘(使用WiFi)完成初始索引檢查例程。在iOS應用程序中處理大量記錄必須有更好的方式。預先嚐試加載核心數據中的所有記錄我錯了嗎?

作爲參考,我包括ListingRecord.h

@property (nonatomic, retain) NSString * amenitiesText; 
@property (nonatomic, retain) NSString * bodyLabel1; 
@property (nonatomic, retain) NSString * bodyLabel2; 
@property (nonatomic, retain) NSString * bodyLabel3; 
@property (nonatomic, retain) NSString * brokerID; 
@property (nonatomic, retain) NSString * companyID; 
@property (nonatomic, retain) NSDate * dateCreated; 
@property (nonatomic, retain) NSString * descriptionText; 
@property (nonatomic, retain) NSString * displayPrice; 
@property (nonatomic, retain) NSString * featuredListing; 
@property (nonatomic, retain) NSString * headerLabel; 
@property (nonatomic, retain) NSData * headerPhoto; 
@property (nonatomic, retain) NSString * lastUpdate; 
@property (nonatomic, retain) NSNumber * latitudeData; 
@property (nonatomic, retain) NSNumber * listingID; 
@property (nonatomic, retain) NSString * listingType1; 
@property (nonatomic, retain) NSString * listingType2; 
@property (nonatomic, retain) NSString * listingType3; 
@property (nonatomic, retain) NSString * listingType4; 
@property (nonatomic, retain) NSString * listingType5; 
@property (nonatomic, retain) NSString * listingType6; 
@property (nonatomic, retain) NSString * listingType7; 
@property (nonatomic, retain) NSString * listingType8; 
@property (nonatomic, retain) NSNumber * longitudeData; 
@property (nonatomic, retain) NSNumber * numberPrice; 
@property (nonatomic, retain) NSData * photo1; 
@property (nonatomic, retain) NSData * photo2; 
@property (nonatomic, retain) NSData * photo3; 
@property (nonatomic, retain) NSData * photo4; 
@property (nonatomic, retain) NSData * photo5; 
@property (nonatomic, retain) NSString * pinLabel; 
@property (nonatomic, retain) NSData * thumbnailPic; 
@property (nonatomic, retain) NSString * sessionID; 

該索引文件包含listingID和LASTUPDATE並比較這些抵靠裝置上的核心數據記錄。

+0

如果您向我們展示瞭如何執行初始索引檢查例程,這將有很大幫助。 – sosborn

+0

列表文件是什麼格式?例如XML?你有沒有想過返回一個JSON對象來表示索引?它可能會加快速度。 – bennythemink

+0

@sosborn - 我做一個NSURLRequest來獲取XML文件,然後做一個NSXMLParser來獲取數據。你想要更多細節嗎? – sangony

回答

2

它似乎有兩個瓶頸,與服務器的通信和檢查程序。爲了幫助解決第一瓶問題,我強烈推薦JSON,如果使用正確,它應該減少從服務器傳遞到設備的數據的大小,並且非常容易使用。它還應該幫助第二個瓶頸,檢查例程,因爲您只需從服務器獲取返回的數據,將其轉換爲帶有一行代碼的JSON對象表示形式,然後基本上處理值的NSDictionary。

+0

你是否建議我只用索引文件或整個軟件包(可以這麼說)去完全刪除XMLParser?您是否認爲我想要在前面加載所有內容的方法是正確的,或者我應該在用戶選擇方法時加載負載? – sangony

+0

這完全取決於你的情況以及你需要重新設計多少代碼。如果我是你,我會首先測試從服務器傳遞索引作爲JSON數據需要多長時間。如果您認爲它在可接受的時間範圍內,則立即加載所有內容,否則將其分解爲更小的卡盤並在用戶選擇時加載。 – bennythemink

+0

另外,如果下載包的其餘部分很快,那麼可能只是將其保留爲基於XML,並且僅將JSON用於索引。這又完全取決於需要進行多少重新設計。我更喜歡把它全部當成JSON,但如果它是一個主要的工作,並且沒有顯着提高用戶的速度,那麼它可能不值得。 – bennythemink

2

如果您需要一次完成所有這些工作,我會安排您的流程邏輯,以便您可以在後臺線程中執行此「初始索引檢查例程」。

另一種選擇是將索引文件發送到服務器,讓後端服務器完成這項工作,並且它只返回添加,刪除,更新等列表。這取決於您的後端服務器是否有能力做這個。

+0

你提出了一個很好的觀點,並且我沒有考慮過這個觀點。我正在使用4D服務器(4d.com)作爲我的後端數據庫。不確定你的建議是否可以完成,但是一旦上市達到10000加元以上,這可能是唯一可行的方法。 – sangony