这是我的问题,我有一组日志可以很快地增长。它们每天被拆分为单独的文件,文件大小可以轻松增长到1GB。为了保持大小,30天前的条目会被清除。
问题在于当我想要搜索这些文件中的某个字符串时。现在,Boyer-Moore搜索非常慢。我知道像dtSearch这样的应用程序可以使用索引提供非常快的搜索,但我不确定如何实现它,而不会占用日志已经占用的两倍空间。
有没有资源可以帮助我?我真的正在寻找一个标准算法,它将解释我应该如何构建索引并使用它进行搜索。
编辑:
Grep行不通,因为此搜索需要集成到跨平台应用程序中。我无法将任何外部程序包含在其中。
它的工作方式是有一个Web前端,它有一个日志浏览器。这与自定义的C++ Web服务器后端进行通信。此服务器需要在合理的时间内搜索日志。目前搜索数GB的日志需要很长时间。
编辑2: 其中一些建议非常好,但我必须重申,我不能集成另一个应用程序,这是合同的一部分。但是回答一些问题,日志中的数据因接收到特定格式的医疗保健相关消息或与之相关的消息而有所不同。我希望依靠索引,因为尽管重建索引可能需要一分钟,但搜索目前需要很长时间(我曾经看到它需要2.5分钟)。此外,在记录数据之前,很多数据都被丢弃了。除非打开某些调试日志选项,否则超过一半的日志消息将被忽略。
搜索基本上是这样的:Web表单上的用户会看到最近消息的列表(随着他们滚动而从磁盘流式传输,对于ajax来说很好),通常,他们会想要搜索其中包含某些信息的消息,例如患者ID或他们发送的某个字符串,因此他们可以在搜索中输入字符串。搜索被异步发送,自定义Web服务器线性搜索每个1MB的日志以获取一些结果。当日志变大时,这个过程可能需要很长时间。这就是我要优化的地方。
问题在于当我想要搜索这些文件中的某个字符串时。现在,Boyer-Moore搜索非常慢。我知道像dtSearch这样的应用程序可以使用索引提供非常快的搜索,但我不确定如何实现它,而不会占用日志已经占用的两倍空间。
有没有资源可以帮助我?我真的正在寻找一个标准算法,它将解释我应该如何构建索引并使用它进行搜索。
编辑:
Grep行不通,因为此搜索需要集成到跨平台应用程序中。我无法将任何外部程序包含在其中。
它的工作方式是有一个Web前端,它有一个日志浏览器。这与自定义的C++ Web服务器后端进行通信。此服务器需要在合理的时间内搜索日志。目前搜索数GB的日志需要很长时间。
编辑2: 其中一些建议非常好,但我必须重申,我不能集成另一个应用程序,这是合同的一部分。但是回答一些问题,日志中的数据因接收到特定格式的医疗保健相关消息或与之相关的消息而有所不同。我希望依靠索引,因为尽管重建索引可能需要一分钟,但搜索目前需要很长时间(我曾经看到它需要2.5分钟)。此外,在记录数据之前,很多数据都被丢弃了。除非打开某些调试日志选项,否则超过一半的日志消息将被忽略。
搜索基本上是这样的:Web表单上的用户会看到最近消息的列表(随着他们滚动而从磁盘流式传输,对于ajax来说很好),通常,他们会想要搜索其中包含某些信息的消息,例如患者ID或他们发送的某个字符串,因此他们可以在搜索中输入字符串。搜索被异步发送,自定义Web服务器线性搜索每个1MB的日志以获取一些结果。当日志变大时,这个过程可能需要很长时间。这就是我要优化的地方。