我有一些巨大的二进制驱动程序日志(每个大约2-5GB,并且在将它们转换为可读形式后可能大约是10倍)并且我需要编写一个工具来允许我有效地顺序浏览,排序,搜索和过滤它们(为了找到并解决错误).
每个日志条目都具有很少的属性,如:时间戳,类型,消息,一些GUID.条目是同质的,没有关系,在"检查"之后不需要存储数据.
我真的不知道如何处理这么多数据.将所有内容保存在内存中将是愚蠢的,将数据保存在平面文件中也是如此.我想过使用像SQLite这样的小型DBMS,但我不确定它是否足够快而且我不需要DMBS的许多功能 - 只有排序和搜索.如果可能的话,在这种情况下,我会急切地换空间以获得速度.
是否有任何库(或可能是数据结构)可以帮助我处理这些数据量?
像Postgre,MSSQL,MySQL这样的"服务"RDBMS是不可能的,该工具应该易于使用,没有任何麻烦.
编辑:哦,有没有人知道SQLite的":内存"模式是否对数据库的大小有任何限制,或者只是填充虚拟内存直到它完全填满?
查看STXXL - 超大型数据集的标准模板库.
"STXXL的核心是用于外部存储器(核外)计算的C++标准模板库STL的实现,即STXXL实现了可以处理仅适合磁盘的大量数据的容器和算法. STL支持易用性和与现有应用程序的兼容性,另一个设计优先级是高性能."
此外,如果您可以为此任务专用多台计算机,请检查Hadoop.特别是HBase,Hive和MapReduce.
我认为将其存储在DBMS中是合适的方法.排序和搜索是DB擅长执行的任务 - 使用这么多数据,使用专为此目的而设计的工具将是一个巨大的优势.
虽然非关系数据存储可能会占用更少的空间,但SQLite可以很好地工作.但是,如果要搜索多个"条目",数据库绝对是可行的方法.
在HDF5文件格式和相关的库是专为存储大量数据和允许快速和高效的I/O超过它.
该pytables项目提供了从蟒蛇使用它们的好方法,并提供了排序和搜索方法.