36

これは重複したスレッドのように見えるかもしれませんが、私の質問は、.. Core Data vs SQLite 3などの質問をたくさん読んだことですが、これらは 2 ~ 3 年前のものです。また、コア データが iOS でサポートされていないために FMDB が開発されたことも読みました。そのため、今後は使用しないでください。一方、コアデータをデータベースとして使用すべきではないことを読みました。

そのため、オブジェクトストレージにコアデータを使用する必要があるかどうかについて、私は真剣に混乱しています。どちらを使用するかをどのような基準で決定する必要があるのでしょうか。アップルまたは他の誰かによって提供されたガイドラインはありますか..それとも時間とともに私に来るものですか.?

4

6 に答える 6

45

アンキット、

これがtl;drスキニーです:コアデータを使用してください。

長い形式は次のとおりです。

Core Data、ORM (FMDB)、または直接の sqlite 呼び出しのいずれかを選択するために多くの基準を使用できますが、この選択の実際のコストは、それを使用する時間、Apple のサポート、および他のプロジェクトからの活用から生じます。(REST サービスを Core Data にマップする RESTKit は最近人気があります。)

したがって、大部分の時間、たとえば 90% 以上 (架空の統計) では、iOS での答えは Core Data を使用することになります。なんで?コツをつかんで、いくつかの小さなヘルパー メソッドを作成すると、Core Data によって、一貫したコンピューティングの世界、つまり Objective-C オブジェクト グラフにとどまることができます。Core Data は、iOS プログラミングの他のすべての側面に役立つ動的言語の使用方法について説明します。したがって、生産性が向上します。フレームワークと戦わないでください。

大規模で複雑な SQLite データベースとスキーマを別のアプリから引き継いでいる場合は、FMDB または SQLite を使用する方が費用対効果が高い場合があります。しかし、私はそれを疑います。DB を Core Data DB に移行するための単純な Mac ベースのコマンド ライン アプリを作成する時間は、限られた単純なタスクです。Objective-C では、ほとんどのビジネス ロジックを書き直さなければならないことがほぼ保証されています。(はい、C++ と Objective-C++ はどちらも優れたテクノロジです。データベースのビジネス ロジックは、メモリが制限されたデバイスで動作するように本当に調整されていますか? 私はそうは思いませんでした。)

Core Data は、パフォーマンスでお尻を叩かれます。それは本当にかなり速いです。DB を使用する場合とは異なる方法で使用する必要があります。特に、ほとんどの場合、ストアからデータをオーバーフェッチしてから、さまざまなセットや配列に対して述語を直接使用してデータを調整します。フラッシュが驚くほど遅い iOS デバイスでは、このオーバーフェッチ戦略は特に効果的です。これらのデバイスには実際に大量の RAM が搭載されているため、これを使用してパフォーマンスを向上させます。(はい、これは上記の移植性の高いビジネス ロジックに対するノックアウトとは明らかな矛盾であることは承知しています。しかし、実際には、デスクトップまたはサーバー環境から移植されたコードには、ディスクの速度、メモリの量、およびメモリの実際の状況について、非常に多くの暗黙の前提が含まれています。バッキング ストアを備えた VM では、ファンキーなメモリ モデルを備えたバッテリ駆動のメモリ制限のあるデバイスではうまく動作しません。また、データを非正規化して、さまざまな iOS および Mac OS X UI ウィジェットでの表示を簡素化します。Core Data が同等の SQLite DB よりも遅くなるアプリケーションがいくつかあります。それらは他の場所で詳しく説明されています。主要な主張の 1 つは、上流のデータベースによって ID が定義されているタスクが Core Data のパフォーマンスにヒットするということです。ただし、賢明なインデックス作成とオーバーフェッチによって、ある程度軽減することができます。

モバイル デバイスについても覚えておくべきことは、これらはインターネットのリーフ上にあるモバイル デバイスであるため、データベースのサイズは通常適度なサイズであるということです。したがって、パフォーマンスを達成しやすくなります。サーバーの世界から学んだ多くの教訓は、モバイルのバッテリー駆動の世界には当てはまらないかもしれません。

言い換えれば、iOS/Mac OS X で Objective-C を使用するためには、「オールイン」する必要がありました。Core Data を使用することで、重要な生産性の利点も得ることができます。

アンドリュー

于 2012-01-05T00:22:10.087 に答える
9

「s」を多用するすべてのプロジェクトでFMDBを使用してINSERTおり、FMDB は古くありません。Github での最後のコミットは昨年 11 月でした。SQL を使用する場合は、FMDB を使用することをお勧めします。

Core Data はすべてのプロジェクトの 95% に適合しますが、最適化に関しては壁にぶつかります。Core Data (OOP など) の利点が必要な場合は、それを使用してください。WHERE" " ユーザー Sqlite (FMDB)で多数の挿入と削除がある場合

この投稿では、Core Date と Sqlite (FMDB) のオフ サイトとトップ サイトについて説明します。

于 2012-01-04T09:47:13.370 に答える
6

CoreData は、SQL データベースの単なる抽象化ではありません。CoreData は、オブジェクト グラフの管理も行います。CoreData は、FMDB ではできないことを実行できます。

いつものように、それはユースケースに大きく依存します。しかし、99% のケースで CoreData が正しい選択です。

パフォーマンスが重要な場合でも、データベースの仕組みを理解する必要があります。しかし、正しく使用すれば、CoreData はそのパフォーマンスを実現できます。しかし、習得には時間がかかります。FMDB で行うのは非常に複雑で、CoreData で行うのは簡単なことがたくさんあります。

于 2012-01-05T09:51:01.313 に答える
0

Core Data は、SQLite3 データベースの単なるオブジェクト抽象化です。つまり、標準的なデータベース操作で管理しやすい永続オブジェクトが得られるということです。モデルを作成することにより、トランザクション モードで作業し、XCode でコア データ データベース構造を設計することもできます。

SQLite3 データベースまたは永続的なメソッドを手動で作成したくない場合は、Core Data を使用します。

于 2012-01-04T08:29:24.373 に答える