Core Data vs SQLite 3 [geschlossen]


314

Ich bin bereits mit relationalen Datenbanken vertraut und habe in der Vergangenheit SQLite (und andere Datenbanken) verwendet. Da Core Data jedoch einen gewissen Reiz hat, denke ich darüber nach, einige Zeit damit zu verbringen, es für die Verwendung in meiner nächsten Anwendung zu lernen.

Hat die Verwendung von Core Data gegenüber SQLite einen großen Vorteil oder umgekehrt? Was sind die Vor- und Nachteile von jedem?

Es fällt mir schwer, die Kosten für das Erlernen von Kerndaten zu rechtfertigen, wenn Apple sie nicht für viele seiner Flaggschiff-Anwendungen wie Mail.app oder iPhoto.app verwendet, sondern sich für SQLite-Datenbanken entscheidet. SQLite wird auch auf dem iPhone häufig verwendet.

Können diejenigen, die mit beiden vertraut sind, ihre Erfahrungen kommentieren? Vielleicht ist die Frage, wie bei den meisten Dingen, tiefer, als nur eine über die andere zu verwenden?


1
Könnten Sie bitte einen Link zu en.wikipedia.org/wiki/Core_Data hinzufügen, damit jeder nicht weiß, was das ist.
RSabet

7
Beachten Sie, dass Core Data nicht als Datenbank verwendet wird und werden sollte!

Antworten:


281

Obwohl Core Data ein Nachkomme von Apples Enterprise Object Framework ist , einem objektrelationalen Mapper (ORM), der eng mit einem relationalen Backend verbunden war / ist, ist Core Data kein ORM. Es ist in der Tat ein Framework zur Verwaltung von Objektgraphen. Es verwaltet ein potenziell sehr großes Diagramm von Objektinstanzen, sodass eine App mit einem Diagramm arbeiten kann, das nicht vollständig in den Speicher passt, indem Objekte bei Bedarf in und aus dem Speicher fehlerhaft ausgeführt werden. Core Data verwaltet auch Einschränkungen für Eigenschaften und Beziehungen und behält die Referenzintegrität bei (z. B. die Konsistenz von Vorwärts- und Rückwärtsverknüpfungen, wenn Objekte zu einer Beziehung hinzugefügt / daraus entfernt werden). Core Data ist somit ein idealer Rahmen für die Erstellung der "Modell" -Komponente einer MVC-Architektur.

Um die grafische Darstellung Management zu implementieren, Core Data geschieht SQLite als Plattenspeicher zu verwenden. Es könnte unter Verwendung einer anderen relationalen Datenbank oder sogar einer nicht relationalen Datenbank wie CouchDB implementiert worden sein . Wie andere bereits betont haben, kann Core Data auch XML oder ein Binärformat oder ein vom Benutzer geschriebenes Atomformat als Backend verwenden (obwohl diese Optionen erfordern, dass das gesamte Objektdiagramm in den Speicher passt). Wenn Sie daran interessiert sind, wie Core Data in einem SQLite-Backend implementiert wird, sollten Sie sich das OmniDataObjects- Framework von OmniGroup ansehen , eine Open-Source-Implementierung einer Teilmenge der Core Data-API. Das BaseTen- Framework ist auch eine Implementierung der Core Data API, die PostgreSQL als Backend verwendet.

Da Core Data kein ORM für SQLite sein soll, kann es kein beliebiges SQLite-Schema lesen. Umgekehrt sollten Sie sich nicht darauf verlassen können, dass Sie die SQLite-Datenspeicher von Core Data mit anderen SQLite-Tools lesen können. Das Schema ist ein Implementierungsdetail, das sich ändern kann.

Somit besteht kein wirklicher Konflikt zwischen der direkten Verwendung von Core Data oder SQLite. Wenn Sie eine relationale Datenbank wünschen, verwenden Sie SQLite (direkt oder über einen der Objective-C-Wrapper wie FMDB ) oder einen relationalen Datenbankserver. Möglicherweise möchten Sie jedoch weiterhin Core Data für die Verwendung als Framework zur Verwaltung von Objektgraphen erlernen. In Kombination mit den Controller-Klassen von Apple und den Widgets für die Schlüsselwertbindung können Sie eine vollständige MVC-Architektur mit sehr wenig Code implementieren .


11
Hinweis fmdb ist kein ORM, sondern nur ein Objekt-Wrapper um sqlite3 C api
robottobor

Danke für den Fang; Ich werde den Beitrag aktualisieren.
Barry Wark

3
Hervorragende Antwort. FMDB ist zu github gewechselt - github.com/ccgus/fmdb - und wird von einem NetNewsWire-Entwickler empfohlen: inessential.com/2010/02/26/on_switching_away_from_core_data
Chris Dolan

50
Mit iOS 5.0 erhalten Sie den zusätzlichen Vorteil, dass Sie iCloud File-Sync kostenlos verwenden können, wenn Sie Core Data verwenden. Wenn Sie SQLite direkt verwenden, müssen Sie viel manuell basteln und implementieren, damit es über iCloud synchronisiert wird.
seltsam

1
Versuchen Sie es mit www.github.com/pmurphyjam/DBExample. Es ist ein Xcode-Projekt, das SQLite verwendet.
Pat

46

Und mit iOS 5.0 erhalten Sie den zusätzlichen Vorteil, dass Sie die iCloud-Dateisynchronisierung kostenlos verwenden können, wenn Sie Core Data verwenden. Wenn Sie SQLite direkt verwenden, müssen Sie viel manuell basteln und implementieren, damit es über iCloud synchronisiert wird.



3
Sicher, aber angesichts des Stolzes und der Freude von Apple werden sie hoffentlich die Dinge in den kommenden iOS-Versionen verbessern.
seltsam

4
Update (nach WWDC 2016) - Die iCloud-Funktionen von Core Data sind veraltet und werden wahrscheinlich in Zukunft eingestellt. Mehr: mjtsai.com/blog/2016/06/17/the-deprecation-of-icloud-core-data
Nikolay Suvandzhiev

35

Core Data ist weniger ein Datenbankmodul als vielmehr eine API, die über den tatsächlichen Datenspeicher abstrahiert. Sie können Core Data anweisen, als SQLite-Datenbank, Plist, Binärdatei oder sogar als benutzerdefinierten Datenspeichertyp zu speichern.

Ich würde empfehlen, Core Data zu lernen, da dies eine hervorragende Ressource ist, die viele Teile der Entwicklung von Kakaoanwendungen erheblich beschleunigt.


13

SQLite ist eines der Datenbankformate für Core Data. Mit Core Data erhalten Sie eine bessere Integration mit dem Rest der Cocoa-API.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.