我使用sqlite文件来存储数据,我存储的很多数据都是NSString格式,如果我将这些数据存储为NSData会使我的sqlite文件的大小变小吗?我还能做些什么来减少sqlite文件的大小吗?
感谢。
答案 0 :(得分:2)
你可以这样做: 保存图片链接而非图片。 如果有大的描述,那么您可以通过服务器获取它。 删除多个数据。即; 重复数据 使用数据库中的数据删除可在运行时生成的数据。 执行规范化以优化数据库,这将避免和清理混乱(如果存在)。
答案 1 :(得分:2)
Prajwal提供了一些优化核心数据存储的一般提示。要回答您的具体问题:不,从NSString
转换为NSData
不会节省任何空间,实际上可能会占用更多空间。 NSData
不进行任何压缩。要转换为NSData
,您需要类似
NSData *myData = [myString dataUsingEncoding:NSUTF8StringEncoding];
但这无济于事,可能会让事情变得更糟。例如,如果您的字符串包含“é”,NSString
表示一个字节。但UTF-8需要两个字节,因此NSData
使用更多空间。
如果你真的想要压缩字符串,那么有一些开源实现可以为你提供压缩的NSData
对象。不要这样做,除非你有一个很多的字符串数据,你知道它会压缩。它可能会节省空间,但(a)它会牺牲速度,而且(b)您将无法使用这些字符串来查找数据存储中的对象。
如果您仍然需要缩小数据存储的大小,请询问您描述数据模型的其他问题。根据您的数据模型的不同,适用不同的技术。
答案 2 :(得分:2)
正如其他人所说,SQLite / CoreData无法真正帮助您完成这项工作。您已经指出了正确的解决方案,即使用NSData在SQLite存储中存储原始字节并自行进行内存转换。
由于压缩本质上很昂贵,因此速度会非常慢。
以下是您需要做的事情:
实施自定义属性以进行翻译
- (NSString *)getAttrString {
NSData *bytes = self.attr
//decompress
}
- (void)setAttrString:(NSString *)s {
NSData *d = //compress
self.attr = d;
}
正如其他人所提到的,压缩小字符串并没有什么好处,所以你可能想要在模型中添加一个布尔值来指示数据是否实际压缩。