我正在致力于戈朗的一个项目,该项目需要索引最近添加的文件内容(使用名为bleve的框架),并且我正在寻找一个解决方案,以便从上次修改后获取文件的内容。我目前的工作是记录每个文件的最后一个索引位置,在以后的索引过程中,我只从前面记录的位置开始检索文件内容。
所以我想知道这里是否有库或内置功能?(不需要被限制去,任何语言都可以工作)
如果有人有比我的工作更好的主意,我会很感激的。
谢谢
发布于 2017-03-21 06:17:20
这取决于文件的变化情况。
如果文件是仅附加的,那么您只需要记录停止索引的最后一个偏移量,然后从那里开始。
如果这些更改可以在任何地方发生,并且这些更改主要是用新字节替换旧字节(比如更改图像的像素),那么也许可以考虑计算小块的校验和,并且只对具有不同校验和的块进行索引。
您可以在Go标准库中检出用于计算散列的crypto包。
如果更改是插入/删除文本文件(如对源代码的更改),则可能使用diff算法可以帮助您找到差异。有点像https://github.com/octavore/delta。
发布于 2017-03-21 06:05:18
如果您在类似Unix的系统中运行,只需使用tail即可。如果指定遵循该文件,则在到达文件结束后,进程将继续等待。您可以使用os/exec在您的程序中调用它,并将Stdout管道输送到您的程序中。然后,您的程序可以定期地或阻塞地从其中读取。
我唯一能想到的在Go中做这件事的方法就是你所描述的。还有一个库试图在Go中模仿tail:https://github.com/hpcloud/tail
https://stackoverflow.com/questions/42917966
复制相似问题