2013-08-02 32 views
0

我對我的sqlite數據庫使用FMDB封裝,並在數據庫中存儲圖像從URL下載,並存儲在BLOB數據,但是當我做像這樣在數據庫中的SELECT查詢:查詢選擇的sqlite中的BLOB數據太慢使用FMDB的iOS

SELECT id,img FROM table1 WHERE name = "Carl" 

,這是在數據庫中的列:

img BLOB 

但查詢速度很慢,如果我從查詢中刪除IMG,這是非常快,我從URL下載圖像後,我調整它的大小,使其更小,並以這種方式節省內存空間:

NSData *biggerImg = [NSData dataWithContentsOfURL:[NSURL URLWithString:url_image]]; 

NSData *img = UIImageJPEGRepresentation([self imageWithImage:[UIImage biggerImg] scaledToSize:CGSizeMake(90, 134)], 1.0); 


- (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize { 
//UIGraphicsBeginImageContext(newSize); 
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0); 
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)]; 
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
return newImage; 
} 

任何人都知道我可以如何使查詢更快?我需要在查詢中也有圖像。

感謝

+0

它是一個選項來分別存儲圖像,並且只有它的路徑在數據庫中?這可能是有趣的:http://www.sqlite.org/intern-v-extern-blob.html。 –

+0

非常感謝你,如果你創建一個答案我會接受它,我也想知道我必須將img存儲在這個文件夾中嗎? this:NSString * Dir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)objectAtIndex:0]; – Piero

回答

1

如這裏記載:http://www.sqlite.org/intern-v-extern-blob.html,它可以提高 如果大的BLOB(諸如圖像數據)存儲在外部,並且只有該文件的路徑被記錄在數據庫中的SQLite的性能。

如果您將圖像存儲在「Documents」目錄中,則它們將備份到iCloud(如果 用戶已激活該功能)。如果不需要iCloud備份(例如,因爲可以隨時從服務器重新加載映像),那麼「Library/Caches」(使用NSCachesDirectory)將是更好的位置。

+0

是的,如果圖像有新版本,圖像會隨時間變化,所以你建議我把它放在NSCachesDirectory中?我還有另一個問題,我已經放在Document文件夾的sqlite.db我必須把它放在NSCachesDirectory?但你的意思是支持iCloud?用戶可以從mac書中打開文件,例如? – Piero

+0

@Piero:請參閱http://www.apple.com/de/support/icloud/backup/和https://developer.apple.com/icloud/documentation/data-storage/。 –