我拥有120万个键值对的数据集。键是一个字符串(一个长度最多为22个字符的数字序列),值是字符串。
发送此信息的最佳方式是什么,以便快速查找和检索值?
我怀疑一个plist不适合这样大小的数据集。
我有两种方式存储数据集 - CSV和带有2列的mySQL数据库表。一世 ll继续使用任何方法将数据最好地导入应用程序。
答案 0 :(得分:3)
Core Data和SQLite是处理iOS中非常大的数据集的两个不错的选择。为您正在讨论的数据类型创建核心数据模型并不困难。然后,您可以将该模型复制到您要编写的小命令行程序中,以将数据移动到Core Data存储中。然后,您可以将生成的数据文件移动到iOS应用程序的资源中。
第三种选择,如果数据可能经常更改,则特别有用,就是构建一个Web服务来提供来自服务的数据。我不认为这是你所要求的,但如果数据集非常大和/或经常变化,那就需要考虑。
答案 1 :(得分:2)
一组文本文件可以很好地工作。你可以:
如果您还关注分发大小,则可以压缩/解压缩这些文件。
或者您可以采用这种方法并使用自定义序列化类来表示集合的子集,如果这听起来像是太多的解析和读取实现。
如果您使用objc类型进行存储和/或解析,那么将这些文件保持在较小的状态会很好。如果你使用c或c ++,那么它将有助于分析应用程序。
使用每字符8位单字节编码,您的数据集最多需要30 MB。一个大文件(再次,有序),你mmap也值得考虑。见[NSData initWithContentsOfMappedFile:path];
。
答案 2 :(得分:0)
我个人的经验是有一个只有数千条记录的plist文件,我可以说它不是那么快。所以我对这些数据的选择是:
(我不知道您的应用是否属于这种情况,但您可以考虑将数据移至服务器并通过网络服务进行搜索,特别是如果您的数据会增长。)
答案 3 :(得分:0)
sqlite文件可能是你最好的选择。您可以使用命令行sqlite3或任何sqlite gui在桌面上创建它。确保索引键列。
按照此处所述导入csv文件:Importing csv files into sqlite
然后只需将数据库添加到项目/目标中。但是,如果要在运行时修改数据库,则必须将其复制到Documents或缓存目录中。
对于围绕sqlite的objective-c包装器,我喜欢fmdb