[解決済み】Core Data vs SQLite 3 [終了しました。]
質問
私はすでにリレーショナル・データベースにはかなり慣れていて、これまでにも 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アーキテクチャを実装することができます。 非常に 少ないコードで
関連
-
[解決済み] Swift のプロトコル: メソッドがスーパークラスのメソッドをオーバーライドしない。
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] ATTACHで開いたSQLiteデータベースファイルのテーブルを一覧表示するにはどうすればよいですか?
-
[解決済み] SQLiteでテーブルが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] AndroidでSQLiteを使用する際に、並行処理の問題を回避するにはどうすればよいですか?
-
[解決済み] Sqliteの複数カラムの主キー
-
[解決済み] Cocoa Autolayout: コンテンツの抱擁 vs コンテンツの圧縮抵抗の優先順位
-
[解決済み] SQLite - UPSERT *not* INSERT or REPLACE
-
[解決済み】ユニットテスト内のコードでバンドルリソースを見つけられないのはなぜですか?
-
[解決済み】実行時に「Interface Builderファイル内の不明なクラス<MyClass>」というエラーが発生する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Swift のプロトコル: メソッドがスーパークラスのメソッドをオーバーライドしない。
-
[解決済み] Cocoa:フレームとバウンドはどう違うの?
-
[解決済み] NSOrderedSetが生成するアクセサで例外が発生する。
-
[解決済み】Core Data vs SQLite 3 [終了しました。]
-
[解決済み】UIImage (Cocoa Touch) または CGImage (Core Graphics) からピクセルデータを取得する方法は?)
-
[解決済み】ユニットテスト内のコードでバンドルリソースを見つけられないのはなぜですか?
-
[解決済み】実行時に「Interface Builderファイル内の不明なクラス<MyClass>」というエラーが発生する。
-
[解決済み] NSUserDefaultsにNSDateを格納する最適な方法は何ですか?
-
[解決済み] CFStringRefをNSStringに変換する方法は?
-
[解決済み] NSDateを年、月、日、時、分、秒の各スタイルにフォーマットする。