web-dev-qa-db-ja.com

コアデータとSQLite 3

私はすでにリレーショナルデータベースに精通しており、過去に SQLite (およびその他のデータベース)を使用しました。ただし、 Core Data には一定の魅力があるため、次のアプリケーションで使用するために時間をかけて学習することを検討しています。

SQLiteを介してCore Dataを使用すること、またはその逆を使用することには多くの利点がありますか?それぞれの長所と短所は何ですか?

AppleがMail.appやiPhoto.appのような主要なアプリケーションの多くにコアデータを使用せず、代わりにSQLiteデータベースを選択する場合、コアデータの学習コストを正当化するのは難しいと思います。 SQLiteはiPhoneでも広く使用されています。

両方の使用に慣れている人は、自分の経験についてコメントできますか?おそらく、ほとんどのものと同様に、質問は一方を他方よりも使用するよりも深いですか?

314
Jason Medeiros

Core DataはAppleの Enterprise Object Framework の子孫ですが、リレーショナルバックエンドに緊密に結び付けられたオブジェクトリレーショナルマッパー(ORM)ですが、Core DataはですnotORM。実際には、オブジェクトグラフ管理フレームワークです。オブジェクトインスタンスの潜在的に非常に大きなグラフを管理し、必要に応じてメモリ内外のオブジェクトをフォールトすることで、アプリがメモリに完全に収まらないグラフを操作できるようにします。また、コアデータは、プロパティと関係の制約を管理し、参照の整合性を維持します(たとえば、オブジェクトが関係に追加されたり関係から削除されたりするときに、前方リンクと後方リンクの一貫性を維持します)。したがって、コアデータは、MVCアーキテクチャの「モデル」コンポーネントを構築するための理想的なフレームワークです。

グラフ管理を実装するために、コアデータhappensはSQLiteをディスクストアとして使用します。 Itcouldは、異なるリレーショナルデータベース、または CouchDB などの非リレーショナルデータベースを使用して実装されています。他の人が指摘したように、Core DataはXMLまたはバイナリ形式またはユーザー作成のアトミック形式をバックエンドとして使用することもできます(ただし、これらのオプションではオブジェクトグラフ全体がメモリに収まる必要があります)。 SQLiteバックエンドでCore Dataを実装する方法に興味がある場合は、Core Data APIのサブセットのオープンソース実装であるOmniGroupの OmniDataObjects フレームワークを確認してください。 BaseTen フレームワークは、PostgreSQLをバックエンドとして使用するCore Data APIの実装でもあります。

Core DataはSQLiteのORMになることを意図していないため、任意のSQLiteスキーマを読み取ることはできません。逆に、Core DataのSQLiteデータストアを他のSQLiteツールで読み取ることができることに依存すべきではありません。スキーマは実装の詳細であり、変更される可能性があります。

したがって、コアデータまたはSQLiteを直接使用する場合、実際には競合はありません。リレーショナルデータベースが必要な場合は、SQLiteを使用するか(直接、または FMDB などのObjective-Cラッパーのいずれかを使用)、またはリレーショナルデータベースサーバーを使用します。ただし、オブジェクトグラフ管理フレームワークとして使用するコアデータを学習することもできます。 Appleのコントローラークラスとキー値バインディング互換のビューウィジェットと組み合わせて、very小さなコードで完全なMVCアーキテクチャを実装できます。

280
Barry Wark

また、iOS 5.0では、Core Dataを使用している場合にiCloud file-syncを無料で使用できるという追加の利点があります。 SQLiteを直接使用している場合、iCloud全体で同期するには、多くの手動での調整と実装が必要になります。

46
strange

コアデータは、実際のデータストアを抽象化するAPIであるため、データベースエンジンではありません。 Core Dataに、sqliteデータベース、plist、バイナリファイル、またはカスタムデータストアタイプとして保存するように指示できます。

コアデータを学習することをお勧めします。これは、ココアアプリケーション開発の多くの部分を大幅に加速する優れたリソースです。

35
Joel Levin

SQLiteは、Core Dataのデータベース形式の1つです。 Core Dataを使用すると、Cocoa APIの残りの部分との統合が向上します。

13
cefstat