2

次の要件を持つ、Objective-C Coredata (SQLite)、NSPersistentDocument ベースのアプリケーションを開発しています。

  1. 単純なモデル: CSV からインポートされた 50 ~ 60K のレコードで、それぞれに +30 フィールドがあります。
  2. レコードの書き込み/追加/削除のサポートは必要ありません。
  3. フィルタリング、ソート、グループ化 (集約) された情報を「表示/表示」するための強力なサポートが必要です。

次のようなリクエストでレコードをグループ化できます。

[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";
    }
}

あなたの推奨される解決策は何ですか?探求する他のアイデアはありますか?

ありがとうルイス

4

0 に答える 0