recherche

Maison  >  Questions et réponses  >  le corps du texte

python - 100G超大文件合并排序

目前想实现两个100G文件合并,日志文件,都有日期,日期会有所交集,如一份1日到10日,另一份5日到15日,所以合并后也需要对日期进行排序。

目标是,查询某一时间区段的信息,目前的打算是:

我可以知道每个文件大小和日起始时间,所以若文件过大,就分割它,然后获取分割小文件的的起始时间,时间区段只要稍加限制,同时由于log的连续性和记录频率不太高,就能确保就只有几个小文件包含了用户需要的信息,然后只返回那几小份的文件的信息,然后全部直接扔进内存排序都不怕,效率也可以。

但我想想,是不是也有办法,直接真的可以把2个100G合成一个200G的?
或有什么更好的办法,目前在写模板的基本方法,想封装好一点以后不管了。但不知道这个要怎么玩。求教,谢谢!

PHP中文网PHP中文网2788 Il y a quelques jours881

répondre à tous(2)je répondrai

  • 阿神

    阿神2017-04-18 09:48:21

    Donnez-moi une idée : je pense que votre idée de la segmentation est en fait assez bonne, mais elle n'a pas vraiment besoin d'être segmentée. Tout ce que vous avez à faire est de maintenir un fichier d'index. C'est-à-dire qu'en lisant le fichier une fois, toutes les 1000 entrées (par exemple), le décalage de début de fichier et le décalage de fin des 1000 entrées sont associés à l'heure de début et à l'heure de fin de ces 1000 entrées. De cette façon, vous obtenez un fichier d'index.

    时间1~时间2,文件1,offset1~offset2
    时间3~时间4,文件2,offset3~offset4
    ...

    Lorsque vous souhaitez effectuer une requête à l'avenir, vérifiez d'abord le fichier d'index, puis vous pourrez savoir dans quel fichier et dans quelle plage se trouvent les données requises. Étant donné que chacun de vos fichiers est trié par heure, il n'est pas nécessaire de trier lors de l'indexation.

    répondre
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 09:48:21

    C'est tellement gros que j'ai encore besoin de me demander pourquoi il est régulièrement transféré dans la base de données.

    répondre
    0
  • Annulerrépondre