如果我有一个CSV文件,将文件保存为放置文本还是将其转换为其他格式会更快? (用于搜索)CSV文件,二进制格式更快?最快的搜索?
在搜索CSV文件方面,检索特定行(按键)的最快方法是什么?不提到排序文件抱歉,我的意思是查找文件中的任意键。
有些更新:
- 文件将被只读
- 文件可以被读取并保存在内存中
如果我有一个CSV文件,将文件保存为放置文本还是将其转换为其他格式会更快? (用于搜索)CSV文件,二进制格式更快?最快的搜索?
在搜索CSV文件方面,检索特定行(按键)的最快方法是什么?不提到排序文件抱歉,我的意思是查找文件中的任意键。
有些更新:
如果你有太多的数据,是非常的生产水平,然后使用Apache Lucene
如果它的小数据集或其关于学习,然后通过Suffix tree和Tries
有几件事情要考虑这一点:
你存储什么样的数据?它是否有意义,将其转换为二进制格式?二进制格式会占用较少的空间(读取文件所花费的时间取决于大小)?
在系统运行时,您是否对同一文件有多个查询?或者每次有人执行查询时您是否必须加载文件?
您是否需要在不同系统之间高效地传输文件?
所有这些因素对决策都非常重要。常见的情况是您只需要加载一次文件,然后执行很多查询。在这种情况下,数据存储的格式并不重要,因为无论如何它都会存储在内存中。花更多时间思考良好的数据结构来处理查询。
另一种常见情况是,您无法保持主应用程序正在运行,因此无法将该文件保留在内存中。在这种情况下,摆脱文件并使用数据库。您可以使用的任何数据库将比您能想到的任何数据都快。但是,在系统之间传输数据库并不容易。
尽管很可能,文件格式并不是真正需要考虑的问题。我已经阅读了很多非常长的CSV文件,与之后我需要处理的数据相比,读取文件所花的时间通常可以忽略不计。
如果文件太大而不能保存在内存中,那么只需将这些键保存在内存中。一些行数也可以保存在内存中,最近访问的行被分页出去,因为需要额外的行。使用fseeks(通过键指示)和文件来查找文件本身中的行。然后将该行加载到内存中,以防需要该行上的其他条目。
您的CSV文件有多大? –
@HunterMcMillen说100万行,我编辑了这个问题,寻找没有排序的查找算法。 – loyalflow