我在CSV文件中有一个很大的单词列表(超过2百万)(大小约35MB)。 我想用索引(原始密钥)将CSV文件导入sqlite3。 所以我使用sqlite命令行工具导入它。数据库已经创建,.sqlite文件的大小已经增长到超过120MB! (因为主键索引占50%)
这里我们遇到了问题:如果我将这120MB .sqlite文件添加到资源中,即使压缩到.ipa文件后它也有> 60MB。而且我想它是否会低于30MB(因为通过E / 3G的限制)。
另外由于我无法通过Web服务导入它(zipped sqlite文件)(45MB * 1000下载= 45GB!这是我服务器的半年限制)。
所以我认为我可以这样做:
但我不知道该怎么做。我试过这样做:
sqlite3_exec(sqlite3_database, ".import mydata.csv mytable", callback, 0, &errMsg);
但它不起作用。失败的原因是“.import”是命令行界面的一部分,而不是C API中的一部分。
所以我需要知道如何将它(解压缩的CSV文件)导入app内的SQLite文件(而不是在使用命令行进行开发时)。
答案 0 :(得分:2)
如果您插入的单词是唯一的,则可以将文本作为主键。
如果您只想测试一组中是否存在单词(例如拼写检查程序),则可以使用替代数据结构,例如布隆过滤器,每个单词只需要9.6位,误报率为1%。
答案 1 :(得分:1)
正如FlightOfStairs根据要求提到的,布隆过滤器是一种解决方案,如果您需要完整数据,另一种解决方案是使用trie或radix tree数据结构。您可以预处理数据并构建这些数据结构,然后将其放入sqlite或其他一些外部数据格式。
答案 2 :(得分:0)
最简单的解决方案是使用NSScanner编写CSV解析器,然后逐行将这些行插入数据库。这实际上是一项相当容易的工作 - 您可以找到完整的CSV解析器here。