目前想实现两个100G文件合并,日志文件,都有日期,日期会有所交集,如一份1日到10日,另一份5日到15日,所以合并后也需要对日期进行排序。
目标是,查询某一时间区段的信息,目前的打算是:
我可以知道每个文件大小和日起始时间,所以若文件过大,就分割它,然后获取分割小文件的的起始时间,时间区段只要稍加限制,同时由于log的连续性和记录频率不太高,就能确保就只有几个小文件包含了用户需要的信息,然后只返回那几小份的文件的信息,然后全部直接扔进内存排序都不怕,效率也可以。
但我想想,是不是也有办法,直接真的可以把2个100G合成一个200G的?
或有什么更好的办法,目前在写模板的基本方法,想封装好一点以后不管了。但不知道这个要怎么玩。求教,谢谢!
阿神2017-04-18 09:48:21
提供個想法:我覺得你分割的想法其實挺好的,只是其實並不需要真的分割,你要做的只是維護一個索引檔。是說透過讀一遍文件,每1000條(比方說),將1000條的起始文件偏移和結束偏移更這1000條的起始時間和結束時間關聯起來。這樣你可以得到一個索引檔。
时间1~时间2,文件1,offset1~offset2
时间3~时间4,文件2,offset3~offset4
...
將來你要查詢的時候,先查索引文件,就可以知道需要的資料在哪個文件的什麼區間裡面了。因為你每個文件本身是按時間排序的,所以在建立索引的時候無需排序。