Data Inti vs SQLite 3 [ditutup]

314

Saya sudah cukup akrab dengan database relasional dan telah menggunakan SQLite (dan database lain) di masa lalu. Namun, Core Data memiliki daya pikat tertentu, jadi saya sedang mempertimbangkan meluangkan waktu untuk mempelajarinya untuk digunakan dalam aplikasi saya berikutnya.

Apakah ada banyak manfaat menggunakan Data Inti dari SQLite, atau sebaliknya? Apa pro / kontra dari masing-masing?

Saya merasa sulit untuk membenarkan biaya belajar Core Data ketika Apple tidak menggunakannya untuk banyak aplikasi andalannya seperti Mail.app atau iPhoto.app - sebagai gantinya memilih untuk database SQLite. SQLite juga digunakan secara luas di iPhone.

Bisakah mereka yang terbiasa menggunakan keduanya mengomentari pengalaman mereka? Mungkin, seperti kebanyakan hal, pertanyaannya lebih dalam daripada hanya menggunakan satu di atas yang lain?

Jason Medeiros
sumber
1
Bisakah Anda menambahkan tautan ke en.wikipedia.org/wiki/Core_Data untuk semua orang yang tidak tahu apa itu.
RSabet
7
Perhatikan bahwa Data Inti tidak dan tidak boleh digunakan sebagai basis data!

Jawaban:

281

Meskipun Core Data adalah turunan dari Enterprise Object Framework Apple , sebuah object-relational mapper (ORM) yang terikat erat dengan backend relasional, Core Data bukan ORM. Ini, pada kenyataannya, kerangka kerja manajemen grafik objek. Ini mengelola grafik instance objek yang berpotensi sangat besar, memungkinkan aplikasi untuk bekerja dengan grafik yang tidak akan sepenuhnya masuk ke dalam memori dengan menyalahkan objek masuk dan keluar dari memori yang diperlukan. Data Inti juga mengelola kendala pada properti dan hubungan dan mempertahankan integritas referensi (mis. Menjaga hubungan maju dan mundur konsisten ketika objek ditambahkan / dihapus ke / dari suatu hubungan). Dengan demikian, Core Data merupakan kerangka kerja ideal untuk membangun "model" komponen arsitektur MVC.

Untuk menerapkan manajemen grafiknya, Core Data terjadi untuk menggunakan SQLite sebagai penyimpan disk. Itu bisa diimplementasikan menggunakan database relasional yang berbeda atau bahkan database non-relasional seperti CouchDB . Seperti yang telah ditunjukkan orang lain, Data Inti juga dapat menggunakan XML atau format biner atau format atom yang ditulis pengguna sebagai backend (meskipun opsi ini mengharuskan seluruh grafik objek masuk ke dalam memori). Jika Anda tertarik pada bagaimana Core Data diimplementasikan pada backend SQLite, Anda mungkin ingin memeriksa kerangka kerja OmniDataObjects OmniGroup , sebuah implementasi open source dari subset dari Core Data API. The BaseTen kerangka juga merupakan implementasi dari API Core Data menggunakan PostgreSQL sebagai backend.

Karena Core Data tidak dimaksudkan untuk menjadi ORM untuk SQLite, itu tidak dapat membaca skema SQLite sewenang-wenang. Sebaliknya, Anda tidak harus bergantung pada kemampuan untuk membaca penyimpanan data SQLite Core Data dengan alat SQLite lainnya; skema adalah detail implementasi yang dapat berubah.

Jadi, sebenarnya tidak ada konflik antara menggunakan Core Data atau SQLite secara langsung. Jika Anda menginginkan database relasional, gunakan SQLite (langsung atau melalui salah satu pembungkus Objective-C seperti FMDB ), atau server database relasional. Namun, Anda mungkin masih ingin mempelajari Data Inti untuk digunakan sebagai kerangka kerja manajemen grafik objek. Dalam kombinasi dengan kelas pengontrol Apple dan widget tampilan kompatibel dengan nilai kunci, Anda dapat mengimplementasikan arsitektur MVC lengkap dengan kode yang sangat sedikit.

Barry Wark
sumber
11
Catatan fmdb bukan ORM, hanya pembungkus objc sekitar sqlite3 C api
robottobor
Terima kasih atas tangkapannya; Saya akan memperbarui pos.
Barry Wark
3
Jawaban yang sangat bagus. FMDB telah pindah ke github - github.com/ccgus/fmdb - dan direkomendasikan oleh pengembang NetNewsWire: inessential.com/2010/02/26/on_switching_away_from_core_data
Chris Dolan
50
Dengan iOS 5.0 Anda mendapatkan manfaat tambahan karena dapat menggunakan sinkronisasi file iCloud secara gratis jika Anda menggunakan Core Data. Jika Anda menggunakan SQLite secara langsung, maka harus banyak mengutak-atik dan implementasi manual agar dapat disinkronkan di iCloud.
aneh
1
Coba www.github.com/pmurphyjam/DBExample Ini adalah proyek Xcode yang menggunakan SQLite.
Pat
46

Dan dengan iOS 5.0 Anda mendapatkan manfaat tambahan karena dapat menggunakan sinkronisasi file iCloud secara gratis jika Anda menggunakan Core Data. Jika Anda menggunakan SQLite secara langsung, maka harus banyak mengutak-atik dan implementasi manual agar dapat disinkronkan di iCloud.

aneh
sumber
7
Catatan: iCloud menyebalkan dengan Core Data
toasted_flakes
3
Tentu saja, tetapi mengingat kebanggaan dan kegembiraan Apple, mudah-mudahan mereka akan meningkatkan hal-hal di versi iOS yang akan datang.
aneh
4
Pembaruan (setelah WWDC 2016) - Kemampuan iCloud dari Core Data sedang tidak digunakan lagi dan mungkin akan dihentikan di masa mendatang. Lebih lanjut: mjtsai.com/blog/2016/06/17/the-deprecation-of-icloud-core-data
Nikolay Suvandzhiev
35

Data Inti bukan merupakan mesin basis data, melainkan API yang abstrak dari penyimpanan data aktual. Anda dapat memberitahu Core Data untuk disimpan sebagai database sqlite, plist, file biner, atau bahkan tipe penyimpanan data kustom.

Saya akan merekomendasikan mempelajari Data Inti, karena merupakan sumber yang bagus yang sangat mempercepat banyak bagian pengembangan aplikasi kakao.

Joel Levin
sumber
13

SQLite adalah salah satu format database untuk Core Data. Menggunakan Data Inti, Anda mendapatkan integrasi yang lebih baik dengan API Cocoa lainnya.

cefstat
sumber