SQLite 3'e Karşı Temel Veriler [kapalı]


314

Ben zaten ilişkisel veritabanlarına oldukça aşinayım ve geçmişte SQLite (ve diğer veritabanlarını) kullanmıştım . Ancak, Core Data'nın belirli bir cazibesi var, bu yüzden bir sonraki uygulamamda kullanmak için biraz zaman harcamayı düşünüyorum.

Çekirdek Verileri SQLite üzerinden kullanmanın ya da tam tersinin faydası var mı? Her birinin artıları / eksileri nelerdir?

Apple, Mail.app veya iPhoto.app gibi amiral gemisi uygulamalarının çoğunda SQL Server veritabanlarını tercih etmediğinde Temel Verileri öğrenmenin maliyetini haklı buluyorum. SQLite ayrıca iPhone'da yaygın olarak kullanılmaktadır.

Her ikisini de kullanmayı bilenler deneyimleri hakkında yorum yapabilir mi? Belki de çoğu şeyde olduğu gibi, soru sadece birini diğerinin üzerinde kullanmaktan daha derindir?


1
Bunun ne olduğunu bilmeyen herkes için en.wikipedia.org/wiki/Core_Data adresine bir bağlantı ekleyebilir misiniz?
RSabet

7
Çekirdek Veri olduğunu unutmayın değil ve bir veritabanı olarak kullanılmamalıdır!

Yanıtlar:


281

Temel Veriler, ilişkisel bir arka uca sıkıca bağlı olan / bağlı olan bir nesne-ilişkisel eşleyici (ORM) olan Apple'ın Kurumsal Nesne Çerçevesinin soyundan gelse de , Temel Veriler bir ORM değildir . Aslında, bir nesne grafiği yönetim çerçevesidir. Olası çok büyük bir nesne örneği grafiğini yönetir ve bir uygulamanın gerektiğinde belleğin içindeki ve dışındaki nesneleri bozarak belleğe tam olarak sığmayacak bir grafikle çalışmasına izin verir. Çekirdek Veriler ayrıca özellikler ve ilişkiler üzerindeki kısıtlamaları yönetir ve referans bütünlüğünü korur (örneğin, bir ilişkiye nesne eklendiğinde / ilişkiden çıkarıldığında ileri ve geri bağlantıları tutarlı tutmak). Bu nedenle Temel Veriler, bir MVC mimarisinin "model" bileşenini oluşturmak için ideal bir çerçevedir.

Onun grafik yönetimini uygulamak için, Çekirdek Veri olur disk deposu olarak SQLite kullanmak. Bu olabilir gibi farklı bir ilişkisel veritabanı ve hatta olmayan bir ilişkisel veritabanı kullanılarak uygulanmıştır CouchDB . Diğerlerinin de belirttiği gibi, Çekirdek Veriler arka uç olarak XML veya ikili biçim veya kullanıcı tarafından yazılmış bir atomik biçim kullanabilir (bu seçenekler tüm nesne grafiğinin belleğe sığmasını gerektirir). Temel Verilerin bir SQLite arka ucunda nasıl uygulandığına ilgi duyuyorsanız, OmniGroup'un Temel Veri API'sının bir alt kümesinin açık kaynaklı bir uygulaması olan OmniDataObjects çerçevesine göz atmak isteyebilirsiniz . BaseTen çerçeve ayrıca bir arka uç olarak PostgreSQL kullanarak Çekirdek Veri API bir uygulamasıdır.

Temel Veriler SQLite için ORM olması amaçlanmadığından, rastgele SQLite şemasını okuyamaz. Tersine, Core Data'nın SQLite veri depolarını diğer SQLite araçlarıyla okuyamaya güvenmemelisiniz; şema değişebilecek bir uygulama ayrıntısıdır.

Bu nedenle, Core Data veya SQLite'ı doğrudan kullanma arasında herhangi bir çelişki yoktur. İlişkisel veritabanı istiyorsanız, SQLite (doğrudan veya FMDB gibi Objective-C sarmalayıcılarından biri aracılığıyla ) veya ilişkisel veritabanı sunucusu kullanın. Ancak yine de bir nesne grafiği yönetim çerçevesi olarak kullanılmak üzere Temel Verileri öğrenmek isteyebilirsiniz. Apple'ın denetleyici sınıfları ve anahtar / değer bağlama uyumlu görünüm widget'larıyla birlikte, çok az kodla eksiksiz bir MVC mimarisi uygulayabilirsiniz .


11
Not fmdb bir ORM değil, sadece sqlite3 C api etrafında bir objc sarmalayıcı
robottobor

Yakaladığınız için teşekkürler; Gönderiyi güncelleyeceğim.
Barry Wark

3
Mükemmel cevap. FMDB, github - github.com/ccgus/fmdb adresine taşındı ve bir NetNewsWire geliştiricisi tarafından önerildi: inessential.com/2010/02/26/on_switching_away_from_core_data
Chris Dolan

50
İOS 5.0 ile, Core Data kullanıyorsanız iCloud dosya senkronizasyonunu ücretsiz kullanabilmenin ek avantajını elde edersiniz. SQLite'yi doğrudan kullanıyorsanız, iCloud'da senkronize etmesini sağlamak için çok fazla manuel düzeltme ve uygulama olması gerekir.
garip

1
Deneyin www.github.com/pmurphyjam/DBExample SQLite kullanan bir Xcode projesidir.
Pat

46

Ve iOS 5.0 ile, Core Data kullanıyorsanız iCloud dosya senkronizasyonunu ücretsiz olarak kullanabilmenin ek avantajını elde edersiniz. SQLite'yi doğrudan kullanıyorsanız, iCloud'da senkronize etmesini sağlamak için çok fazla manuel düzeltme ve uygulama olması gerekir.



3
Tabii ki, ancak Apple'ın gururu ve neşesi göz önüne alındığında, umarım gelecek iOS sürümlerindeki şeyleri geliştirecekler.
garip

4
Güncelleme (WWDC 2016'dan sonra) - Core Data'nın iCloud kabloları kullanımdan kaldırılıyor ve muhtemelen gelecekte kullanımdan kaldırılacak. Daha fazla: mjtsai.com/blog/2016/06/17/the-deprecation-of-icloud-core-data
Nikolay Suvandzhiev

35

Temel Veri, gerçek veri deposu üzerinde özetleyen bir API olduğu kadar bir veritabanı motoru değildir. Temel Verilere sqlite veritabanı, plist, ikili dosya veya hatta özel veri deposu türü olarak kaydetmesini söyleyebilirsiniz.

Temel Verileri öğrenmenizi tavsiye ederim, çünkü kakao uygulama geliştirmenin birçok bölümünü büyük ölçüde hızlandıran mükemmel bir kaynak.


13

SQLite, Core Data için veritabanı biçimlerinden biridir. Temel Verileri kullanarak, geri kalan Kakao API'sıyla daha iyi entegrasyon elde edersiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.