校时引发的血案

时间:2022-09-20 07:25:39
在做一个模块,负责管理日志文件,提供检索功能,检索需求比较简单,时间和类型。默认情况下,按照时间顺序存储,使用二分查找很容易满足时间检索需求,按类型建立索引文件,这样当按类型检索时直接检索该类型的索引文件即可。

现在的困难是,如何按照时间顺序存储,关键问题就是一旦校时(例如从09年校时到08年),将引起惨重的血案。

望高手指点(因内存不足,不支持sqlit等数据库)

11 个解决方案

#1


日志文件本来不就是按照时间顺序打印的吗 
校时?怎么个校时法

#2


现在的困难是,如何按照时间顺序存储,关键问题就是一旦校时(例如从09年校时到08年),将引起惨重的血案。

维护一个查找树吧,比如红黑树。

#3


引用 2 楼 hairetz 的回复:
现在的困难是,如何按照时间顺序存储,关键问题就是一旦校时(例如从09年校时到08年),将引起惨重的血案。

 维护一个查找树吧,比如红黑树。


因为日志文件数量较大,因此将索引保存在内存中不大合适(也怕掉电会导致索引丢失,再建立索引得不偿失)。因此使用树或链表等想法被否决了。。。

#4


引用 1 楼 qqwx_1986 的回复:
日志文件本来不就是按照时间顺序打印的吗
 校时?怎么个校时法


不是打印,而是按时间顺序将日志插入到日志文件中。校时后,日志信息的标识变成08年,再插入日志文件中就有可能乱序了。

#5


按日期多文件保存?

#6


引用 4 楼 jamesf1982 的回复:
引用 1 楼 qqwx_1986 的回复:
日志文件本来不就是按照时间顺序打印的吗
校时?怎么个校时法


不是打印,而是按时间顺序将日志插入到日志文件中。校时后,日志信息的标识变成08年,再插入日志文件中就有可能乱序了。


这句不太理解,你修改了时间为08年,这个时候这段数据你又不想按照08年的时间去插入,但是你也不知道现在准确的时间,你预想该数据要插入在什么位置?

#7


其实就是想在08年的位置存进去,但仍希望按时间顺序存储。不过文件形式的话,从中间插入比较难,而在内存中的话,又担心掉电导致信息丢失,所以想找一个能较好满足需求的方案

#8


引用 5 楼 hai040 的回复:
按日期多文件保存?


也想过这种方法,不过在检索时太费事,如果检索较长时间的日志,则有可能fopen和fclose多次,效率上不行,同时也担心程序的误操作导致损坏了文件系统

#9


如果校时不多的话
把校时后的记录存成另一个文件
再用一个文件标记原文件里失效的记录
..

#10


引用 7 楼 jamesf1982 的回复:
其实就是想在08年的位置存进去,但仍希望按时间顺序存储。不过文件形式的话,从中间插入比较难,而在内存中的话,又担心掉电导致信息丢失,所以想找一个能较好满足需求的方案


明白你的意思了,感觉最好这样,不要只存一个文件,每天存一个文件,按日期命名,这样就可以根据日期索引。
插入的时候还是读到内存重写文件来实现。
或者你可以试下内存文件映射,但是之前看你说了,内存是不够的。

#11


看来两位都是建议多文件存储,多谢

#1


日志文件本来不就是按照时间顺序打印的吗 
校时?怎么个校时法

#2


现在的困难是,如何按照时间顺序存储,关键问题就是一旦校时(例如从09年校时到08年),将引起惨重的血案。

维护一个查找树吧,比如红黑树。

#3


引用 2 楼 hairetz 的回复:
现在的困难是,如何按照时间顺序存储,关键问题就是一旦校时(例如从09年校时到08年),将引起惨重的血案。

 维护一个查找树吧,比如红黑树。


因为日志文件数量较大,因此将索引保存在内存中不大合适(也怕掉电会导致索引丢失,再建立索引得不偿失)。因此使用树或链表等想法被否决了。。。

#4


引用 1 楼 qqwx_1986 的回复:
日志文件本来不就是按照时间顺序打印的吗
 校时?怎么个校时法


不是打印,而是按时间顺序将日志插入到日志文件中。校时后,日志信息的标识变成08年,再插入日志文件中就有可能乱序了。

#5


按日期多文件保存?

#6


引用 4 楼 jamesf1982 的回复:
引用 1 楼 qqwx_1986 的回复:
日志文件本来不就是按照时间顺序打印的吗
校时?怎么个校时法


不是打印,而是按时间顺序将日志插入到日志文件中。校时后,日志信息的标识变成08年,再插入日志文件中就有可能乱序了。


这句不太理解,你修改了时间为08年,这个时候这段数据你又不想按照08年的时间去插入,但是你也不知道现在准确的时间,你预想该数据要插入在什么位置?

#7


其实就是想在08年的位置存进去,但仍希望按时间顺序存储。不过文件形式的话,从中间插入比较难,而在内存中的话,又担心掉电导致信息丢失,所以想找一个能较好满足需求的方案

#8


引用 5 楼 hai040 的回复:
按日期多文件保存?


也想过这种方法,不过在检索时太费事,如果检索较长时间的日志,则有可能fopen和fclose多次,效率上不行,同时也担心程序的误操作导致损坏了文件系统

#9


如果校时不多的话
把校时后的记录存成另一个文件
再用一个文件标记原文件里失效的记录
..

#10


引用 7 楼 jamesf1982 的回复:
其实就是想在08年的位置存进去,但仍希望按时间顺序存储。不过文件形式的话,从中间插入比较难,而在内存中的话,又担心掉电导致信息丢失,所以想找一个能较好满足需求的方案


明白你的意思了,感觉最好这样,不要只存一个文件,每天存一个文件,按日期命名,这样就可以根据日期索引。
插入的时候还是读到内存重写文件来实现。
或者你可以试下内存文件映射,但是之前看你说了,内存是不够的。

#11


看来两位都是建议多文件存储,多谢