0

sqliteファイルを使用してデータを保存しています。保存するデータの多くはNSString形式ですが、このデータをNSDataとして保存すると、sqliteファイルのサイズが小さくなりますか?sqliteファイルサイズを減らすために他にできることはありますか?

ありがとう。

4

3 に答える 3

2

Prajwalは、CoreDataストレージを最適化するためのいくつかの優れた一般的なヒントを提供しました。ただし、特定の質問に答えるには、次のようにします。いいえ、からに変換しNSStringNSDataもスペースは節約されず、実際にはより多くのスペースが使用される可能性があります。NSData圧縮は行いません。あなたに変換するには、NSData次のようなものが必要です

NSData *myData = [myString dataUsingEncoding:NSUTF8StringEncoding];

しかし、それは役に立たず、事態を悪化させる可能性があります。たとえば、文字列に「é」が含まれている場合、NSStringそれを1バイトで表します。ただし、UTF-8は2バイトを必要とするため、NSDataより多くのスペースを使用します。

本当に文字列を圧縮したい場合は、圧縮されたNSDataオブジェクトを提供するオープンソースの実装があります。圧縮されることがわかっている文字列データがたくさんある場合を除いて、これを行わないでください。スペースを節約できるかもしれませんが、(a)速度を犠牲にしてそうします。また、(b)これらの文字列を使用してデータストア内のオブジェクトを検索することはできません。

それでもデータストアのサイズを縮小する必要がある場合は、データモデルを説明する場所について別の質問をしてください。データモデルがどのように見えるかに応じて、さまざまな手法が適用されます。

于 2013-01-25T23:05:58.740 に答える
2

あなたはこれを行うことができます: 画像の代わりに画像リンクを保存します。大きな説明がある場合は、サーバーを介して取得できます。複数のデータを削除します。すなわち; 重複データ データベース内のデータを使用して実行時に生成される可能性のあるデータを削除します。 正規化を実行してデータベースを最適化し、混乱が存在する場合はそれを回避してクリーンアップします。

于 2013-01-25T09:36:07.540 に答える
2

他の人が述べているように、SQLite/CoreDataはこの取り組みであなたを本当に助けることはできません。NSDataを使用して生のバイトをSQLiteストアに格納し、メモリ内変換を自分で行うという正しい解決策をすでに指摘しました。

圧縮は本質的に高価であるため、これは非常に遅くなります。

これがあなたがする必要があることです:

  1. 属性タイプをNSDataに設定します
  2. libzをチェックして、Xcodeでプロジェクトに追加してください
  3. libzから圧縮フレーバーを選択します
  4. 翻訳を行うためのカスタムプロパティを実装する

    - (NSString *)getAttrString {
         NSData *bytes = self.attr
         //decompress
    }
    
    - (void)setAttrString:(NSString *)s {
        NSData *d = //compress
        self.attr = d;
    }
    

他の人が述べているように、小さな文字列を圧縮することには実際には何のメリットもありません。そのため、データが実際に圧縮されたかどうかを示すブール値をモデルに追加することをお勧めします。

于 2013-01-26T11:37:03.223 に答える