如何用文件做大容量缓冲区,实现同时读写?(类似生产者消费者)

tangwing 2009-12-05 09:38:12
最近做一个网络入侵检测系统,模块间需要传递的数据量很大,我们觉得应当使用文件做为缓冲但需要实现同时的高效读写,还请高人指点下!谢谢了!
...全文
319 14 打赏 收藏 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
tangwing 2009-12-06
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 yidinghe 的回复:]
引用 3 楼 tangwing 的回复:
感谢楼上指点!有些启示!这里再补充一下,数据量非常大,平均大约有每秒200M的样子,所以恐怕不能放内存里。

那就有两个问题:
1、磁盘读写速度能不能满足 200M/s?
2、CPU 能不能处理的过来?

如果其中一个做不到,那就要升级硬件,或者分流到多台机器去处理。
[/Quote]

我也是最近才意识到这个严重的问题,还好不必分析所有数据包,同一连接的数据包只需提取一次特征值即可。现在主要还是处理缓冲的问题。
justinavril 2009-12-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 tangwing 的回复:]
感谢楼上指点!有些启示!这里再补充一下,数据量非常大,平均大约有每秒200M的样子,所以恐怕不能放内存里。
[/Quote]
200M/s?嗯...数据量确实挺大!
捏造的信仰 2009-12-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 tangwing 的回复:]
感谢楼上指点!有些启示!这里再补充一下,数据量非常大,平均大约有每秒200M的样子,所以恐怕不能放内存里。
[/Quote]
那就有两个问题:
1、磁盘读写速度能不能满足 200M/s?
2、CPU 能不能处理的过来?

如果其中一个做不到,那就要升级硬件,或者分流到多台机器去处理。
tangwing 2009-12-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 fengboxjtu556 的回复:]
如果是linux,可以写在内核态,效率很高的。
linux的netfilter机制就可以实现入侵检测。
[/Quote]

对 那个能实现一部分辅助功能不过自然不是很专业。我们把数据全部截获并作出分析,在捕获模块和分析模块的连接处就产生了数据传递缓冲的问题。
fengboxjtu556 2009-12-05
  • 打赏
  • 举报
回复
如果是linux,可以写在内核态,效率很高的。
linux的netfilter机制就可以实现入侵检测。
tangwing 2009-12-05
  • 打赏
  • 举报
回复
呜呜……
tangwing 2009-12-05
  • 打赏
  • 举报
回复
感谢楼上指点!有些启示!这里再补充一下,数据量非常大,平均大约有每秒200M的样子,所以恐怕不能放内存里。
捏造的信仰 2009-12-05
  • 打赏
  • 举报
回复
同时读写的缓冲要不就放在内存,要不就放在不同的文件。可以这样:整个读写包括写线程和读线程,写线程每分钟新建一个文件(如200912050957.buffer.tmp),将缓冲写进去,写完之后将其重命名(如200912050957.buffer);读线程则读取创建最早的已写完的文件(如 .buffer 文件),这样就可以实现用文件作为缓冲。当然还有一些细节比如应用重新启动后如何恢复读写等。
rumlee 2009-12-05
  • 打赏
  • 举报
回复
有开源的缓存,如oscache等。
tangwing 2009-12-05
  • 打赏
  • 举报
回复
晕!又被淹了!不带这么玩儿的,再顶!
tangwing 2009-12-05
  • 打赏
  • 举报
回复
感谢大家!自顶一下
whut0802 2009-12-05
  • 打赏
  • 举报
回复
平均大约有每秒200M的样子,哈哈,大大滴,帮顶下吧
苍蝇①号 2009-12-05
  • 打赏
  • 举报
回复
有多少读友多少写,读写之间有什么关系,每一条记录的大小多少?这写都要考虑的

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧