sqliteファイルを使用してデータを保存しています。保存するデータの多くはNSString形式ですが、このデータをNSDataとして保存すると、sqliteファイルのサイズが小さくなりますか?sqliteファイルサイズを減らすために他にできることはありますか?
ありがとう。
sqliteファイルを使用してデータを保存しています。保存するデータの多くはNSString形式ですが、このデータをNSDataとして保存すると、sqliteファイルのサイズが小さくなりますか?sqliteファイルサイズを減らすために他にできることはありますか?
ありがとう。
Prajwalは、CoreDataストレージを最適化するためのいくつかの優れた一般的なヒントを提供しました。ただし、特定の質問に答えるには、次のようにします。いいえ、からに変換しNSString
てNSData
もスペースは節約されず、実際にはより多くのスペースが使用される可能性があります。NSData
圧縮は行いません。あなたに変換するには、NSData
次のようなものが必要です
NSData *myData = [myString dataUsingEncoding:NSUTF8StringEncoding];
しかし、それは役に立たず、事態を悪化させる可能性があります。たとえば、文字列に「é」が含まれている場合、NSString
それを1バイトで表します。ただし、UTF-8は2バイトを必要とするため、NSData
より多くのスペースを使用します。
本当に文字列を圧縮したい場合は、圧縮されたNSData
オブジェクトを提供するオープンソースの実装があります。圧縮されることがわかっている文字列データがたくさんある場合を除いて、これを行わないでください。スペースを節約できるかもしれませんが、(a)速度を犠牲にしてそうします。また、(b)これらの文字列を使用してデータストア内のオブジェクトを検索することはできません。
それでもデータストアのサイズを縮小する必要がある場合は、データモデルを説明する場所について別の質問をしてください。データモデルがどのように見えるかに応じて、さまざまな手法が適用されます。
あなたはこれを行うことができます: 画像の代わりに画像リンクを保存します。大きな説明がある場合は、サーバーを介して取得できます。複数のデータを削除します。すなわち; 重複データ データベース内のデータを使用して実行時に生成される可能性のあるデータを削除します。 正規化を実行してデータベースを最適化し、混乱が存在する場合はそれを回避してクリーンアップします。
他の人が述べているように、SQLite/CoreDataはこの取り組みであなたを本当に助けることはできません。NSDataを使用して生のバイトをSQLiteストアに格納し、メモリ内変換を自分で行うという正しい解決策をすでに指摘しました。
圧縮は本質的に高価であるため、これは非常に遅くなります。
これがあなたがする必要があることです:
翻訳を行うためのカスタムプロパティを実装する
- (NSString *)getAttrString {
NSData *bytes = self.attr
//decompress
}
- (void)setAttrString:(NSString *)s {
NSData *d = //compress
self.attr = d;
}
他の人が述べているように、小さな文字列を圧縮することには実際には何のメリットもありません。そのため、データが実際に圧縮されたかどうかを示すブール値をモデルに追加することをお勧めします。