Core Data VS Sqlite または FMDB....? 質問する

Core Data VS Sqlite または FMDB....? 質問する

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

オブジェクトストレージにコアデータを使用するべきかどうか、私は真剣に混乱しています何を基準にどちらを使用するか決めるべきでしょうか? Apple または他の誰かからガイドラインが提供されているのでしょうか? それとも、時間が経てばわかるようになるのでしょうか?

ベストアンサー1

アンキット、

要約すると、Core Data を使用します。

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

Core Data、ORM (FMDB)、または直接の sqlite 呼び出しの中から選択するにはさまざまな基準を使用できますが、この選択の実際のコストは、使用時間、Apple のサポート、および他のプロジェクトからの活用によって決まります。(REST サービスを Core Data にマッピングする RESTKit は、最近人気があります。)

したがって、iOS では、90% 以上 (架空の統計) といった大部分の時間で、Core Data を使用するのが答えになります。なぜでしょうか。Core Data の使い方を習得し、いくつかの小さなヘルパー メソッドを作成すると、Core Data によって、Objective-C オブジェクト グラフという一貫したコンピューティングの世界が維持されます。Core Data は、iOS プログラミングのあらゆる側面に役立つ動的言語の使用方法を教えてくれます。したがって、生産性が向上します。フレームワークと格闘する必要はありません。

大規模で複雑な SQLite データベースとスキーマを別のアプリから移行する場合、FMDB または SQLite のいずれかを使用する方がコスト効率が良いかもしれません。しかし、私はそうは思いません。シンプルな Mac ベースのコマンド ライン アプリを作成して DB を Core Data DB に移行するのは、限られた時間で簡単な作業です。ビジネス ロジックのほとんどを Objective-C で書き直す必要があることはほぼ確実です。(はい、C++ と Objective-C++ はどちらも優れたテクノロジです。データベースのビジネス ロジックは、メモリが限られたデバイスで動作するように本当に調整されていますか? 私はそうは思いませんでした。)

Core Data はパフォーマンスに関して評判が悪いです。実際にはかなり高速です。DB とは使い方が違うだけです。特に、ほとんどの場合、ストアからデータをオーバーフェッチし、その後、さまざまなセットや配列に対して述語を直接使用してデータを絞り込みます。フラッシュが驚くほど遅い iOS デバイスでは、このオーバーフェッチ戦略が特に効果的です。これらのデバイスには実際に多くの RAM が搭載されているので、それを使用してパフォーマンスを向上させます。(はい、これは上記のポータブル ビジネス ロジックに対する批判と明らかに矛盾していることは承知しています。しかし、実際には、デスクトップまたはサーバー環境から移植されたコードには、ディスクの速度、メモリの量、およびバックアップ ストアを備えた VM の現実について多くの暗黙の仮定があるため、バッテリー駆動でメモリが制限され、奇妙なメモリ モデルを持つデバイスではうまく機能しません。[Android デバイスでもうまく機能しません。]) また、データを非正規化して、さまざまな iOS および Mac OS X UI ウィジェットでの表示を簡素化します。Core Data が同等の SQLite DB よりも遅くなるアプリケーションがいくつかあります。これらについては、他の場所で詳しく説明されています。1 つの大きな主張は、上流のデータベースによって ID が定義されているタスクが Core Data のパフォーマンスに影響を与えるというものです。これは事実です。ただし、賢明なインデックス作成とオーバーフェッチによって、ある程度は軽減できます。

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

言い換えれば、iOS/Mac OS X で Objective-C を使用するために「全力で」取り組む必要があったとしても、Core Data を使用することで重要な生産性のメリットも得られます。

アンドリュー

おすすめ記事