1. ホーム
  2. cocoa

[解決済み】Core Data vs SQLite 3 [終了しました。]

2022-03-28 22:41:19

質問

私はすでにリレーショナル・データベースにはかなり慣れていて、これまでにも SQLite (他のデータベースも)過去にありました。しかし コアデータ が魅力的なので、次のアプリケーションで使うために時間をかけて勉強しようと思っています。

SQLiteよりもCore Dataを使うことに大きなメリットはあるのでしょうか、それとも逆でしょうか?また、それぞれの長所と短所は何でしょうか?

AppleがMail.appやiPhoto.appのような主要アプリケーションの多くでCore Dataを使用せず、SQLiteデータベースを選択している以上、Core Dataを習得するための費用を正当化することは難しいと思います。SQLiteはiPhoneでも広く使われています。

両者を使い慣れた方の感想をお聞かせください。おそらく、ほとんどのことがそうであるように、問題はどちらか一方を使うことよりも深いのではないでしょうか?

どのように解決するのか?

Core Dataは、Appleの エンタープライズ・オブジェクト・フレームワーク は、リレーショナルバックエンドと密接に結びついたオブジェクトリレーショナルマッパー (ORM) であり、Core Data は ではない ORMです。実は、これはオブジェクト・グラフ・マネジメントのフレームワークなのです。オブジェクトインスタンスの非常に大きなグラフを管理し、必要に応じてオブジェクトをメモリに入れたり出したりすることで、メモリに収まりきらないグラフを扱うことができるようになります。また、Core Dataはプロパティとリレーションシップの制約を管理し、参照の整合性を保ちます(例えば、オブジェクトがリレーションシップに追加/削除されたときに前方と後方のリンクを一貫して維持します)。このように、Core Dataは、MVCアーキテクチャのモデルコンポーネントを構築するための理想的なフレームワークです。

グラフ管理を実装するために、Core Dataは 起こる は、ディスクストアとしてSQLiteを使用しています。それは 可能 のような非リレーショナルデータベースを使用して実装されています。 CouchDB . 他の人も指摘しているように,Core DataはXMLやバイナリ形式,あるいはユーザーが書いたアトミック形式をバックエンドとして使うこともできます(ただし,これらのオプションではオブジェクトグラフ全体がメモリに収まることが必要です).もし,Core DataがSQLiteのバックエンドでどのように実装されているかに興味があれば,OmniGroupの オムニデータオブジェクト フレームワークは、Core Data APIのサブセットをオープンソースで実装したものです。このフレームワークは,Core Data APIのサブセットをオープンソースで実装したものである. ベーステン フレームワークもPostgreSQLをバックエンドとするCore Data APIの実装である。

Core Data は SQLite 用の ORM ではないので、任意の SQLite スキーマを読み込むことはできません。逆に言えば、Core Data の SQLite データストアを他の SQLite ツールから読み込めるかどうかを当てにするべきではありません。

このように、Core Dataを直接使うか、SQLiteを使うかは、特に対立するものではありません。もしリレーショナルデータベースが必要なら、SQLite を使ってください (直接使うか、あるいは FMDB または、リレーショナルデータベースサーバー。しかし、オブジェクトグラフの管理フレームワークとして使用するために、Core Dataを学習するのもよいでしょう。Appleのコントローラクラスやキーバインド対応のビューウィジェットと組み合わせることで、完全なMVCアーキテクチャを実装することができます。 非常に 少ないコードで