次の要件を持つ、Objective-C Coredata (SQLite)、NSPersistentDocument ベースのアプリケーションを開発しています。
- 単純なモデル: CSV からインポートされた 50 ~ 60K のレコードで、それぞれに +30 フィールドがあります。
- レコードの書き込み/追加/削除のサポートは必要ありません。
- フィルタリング、ソート、グループ化 (集約) された情報を「表示/表示」するための強力なサポートが必要です。
次のようなリクエストでレコードをグループ化できます。
[fetchRequest setPropertiesToGroupBy:…]
[fetchRequest setPropertiesToFetch:…]
私のテスト OPTION 1
Coredata エンティティと NSTableView にバインドされた NSArrayController を使用しました
- できます。
- 利点: 必要なコードはほとんどなく、フェッチを行い、フィルター述語とソート記述子を設定できます。
- 短所: レコードの集約をサポートしていないため、フェッチ要求に追加情報を groupBy に追加することができません。
私のテスト OPTION 2
プログラムでフェッチし、結果を NSDictionary の NSArray に残し、配列クラスと NSTableView にバインドされた NSArrayController を使用します
- 動作します。
- メリット:自分のやりたいことをサポートしてくれる。自分で Fetch リクエストを実行すると、フィルター述語、ソート記述子、および AGGREGATION (groupBy) を使用できます。
- 短所:実際には効率的ではないと思います。
filter/sort/groupby オプションを変更するたびに結果を nsdictionary の nsarray に残すことは、非効率的な方法のように思えます。キーが各レコードで繰り返され、メモリと CPU サイクルが消費されていることがわかるように、NSArray の結果を次に示します...
{
{
"f_01_Type" = "typeA";
"f_02_Status" = "statusX";
:
"f_32_Period" = "2013010102";
},
:
{
"f_01_Type" = "typeF";
"f_02_Status" = "statusU";
:
"f_32_Period" = "2009011102";
}
}
あなたの推奨される解決策は何ですか?探求する他のアイデアはありますか?
ありがとうルイス