資料和表的持久化中, Core Data 與 SQLite 的效能對比
新建Window Base Application的時候,選上下面的使用Core Data,模板就自動建立好了,在delegate檔案裡提供了使用Core Data存取資料的所有方法,在其它View Controller裡面只要呼叫delegate裡面的方法就可以了。而修改Data Model並基於該Model建立Entity定義也提供了視覺化的操作,一旦定義了例項,只要在程式中 new 一個例項,給變數賦值,然後呼叫 delegate中的save方法就可以新增一條新的記錄了。這種方法對於長文字和時間等sql中比較難處理的欄位尤其好用。而且在已儲存的記錄中取列表 等操作也非常方便。(具體可以參考apple提供的Core Data入門教程)。
但是後來當我需要做彙總功能的時候,就完全傻掉了,雖然Core Data也提供了簡單的sum, avg等運算,但是對於ralationship下的sum卻完全找不到文件,甚至論壇上也搜不到解決方案。難道要我取出list再一個個手動彙總?這樣 資料量多的時候效率低的不是一點。當然,這時候如果能直接使用sql語句來彙總,那就最簡單不過了。可是,Core Data封裝的很完整,都不知道它把資料存到哪裡去了,怎麼辦?難道要用sqlite重寫整個程式,那已有新增和明細等功能就要做相當大的無謂的改動了。
今天終於找到了解決方案:Core Data本身就是基於sqlite的封裝,所以它的底層仍然是使用sqlite進行儲存資料的,而它使用的資料庫,就在delegate檔案中。通常是程 序的Documents目錄下的以程式名為名字的sqlite檔案。如果程式已經在模擬器中執行過,只要進入使用者目錄下的 Library/Application Support/iPhone Simulator/User/Applications/,這裡是你所有模擬器中執行過的程式,找到你需要的那個,進去以後進入Documents目 錄,裡面就是自動生成的sqlite資料庫檔案。把它複製出來,用sqlite3命令直接檢視資料庫結構就可以了。
預設情況下生成的資料表的名字就是你的Entity的名字,加上字母Z開頭,欄位名也就是你定義的例項名字,同樣加上字母Z開頭,而主鍵就是個 自增長的int型。有了這個資料庫結構,在程式中新增libsqlite3.0.dylib的framework,然後就可以在程式中使用原生 sqlite3功能了。
有了方便的core data解決簡單的資料操作,再配合完全自定義的sqlite功能,現在可以隨心所欲的開發強大的資料庫應用了?!