2017-01-18 3 views
-1

私はCLLocationManagerから描画されたポイントのセットを含むアプリケーションに取り組んでおり、それらをマップ上に描画します。私は個々の実体として各点を必要とすることは決してありません。パスの文脈においてのみ意味を持ちます。Coredata performance:多くの個々のエンティティを読み込むためのペナルティはありますか?

ポイントを表すモデルを作成する代わりに、パスを大きなJSON(または他のより効率的な文字列フォーマット)として保存するだけで、データを取り出すときに単一のエンティティのみを読み取ることができます。これはオーバーヘッドを節約できると私には思われます、それは本当ですか?

答えて

1

これは何らかのテストが必要なものです。ポイントを含むパスを直接見つけることは、おそらくより速い方法ですが、特定のパスに対応するすべてのポイントをフェッチすることができますが、文字列に書き込む部分は少し外れているようです。これらの文字列を解析するのが遅くなります。 (JSONは文字列です)。

ポイントをパスに保存するには、ポイントエンティティを追加することをお勧めします。ポイントエンティティは、パスを参照してリンクされます。代わりに、変換可能なデータを使用することもできます。あなたのポイントは、2つまたは3つのdouble値で表され、バッファに直接入れることができます(例えば、NSData)。保存されるデータの長さは、点の数をdata.length/(sizeof(double)*dimensions)と定義します。これはObjectiveCで非常に簡単に行えますが、Swiftでは生データや安全でないポインタを扱う際に頭が紛れることがあります。

これは実際に実装しているものによって異なりますが、データベースに非常に多くのパスを配置する予定がある場合でも、データを取得する際に大きな遅延が予想されます。あなたはセクターの作成を検討したいかもしれません。各セクターは、データベース()と同じデータで表されます。データベースの初期化では、地球全体のセクターを作成するために繰り返します。次に、パスを挿入するときに、パスが交差する領域を確認し、それらの領域にパスを割り当てます(多対多の関係)。ここで地図を表示すると、どの領域が表示されているかを確認し、それらの領域のみを取り出してからそれらの領域を抽出します。

関連する問題