【发布时间】:2016-01-28 08:53:55
【问题描述】:
我有一个运行多个 perl 工作进程的系统,所有这些进程都需要查找布隆过滤器。如果我使用标准的布隆过滤器 perl 模块(Bloom::Filter 或其他),每个子进程都需要添加到布隆过滤器中 有没有办法可以使用跨多个进程共享的布隆过滤器
我什至需要将数据持久化到磁盘,因为每次我重新启动系统时,我都可以重复使用bloomfilter数据
【问题讨论】:
-
如果一个子进程更改过滤器,其他子进程是否应该立即看到更改?
-
运行时过滤器不会有任何变化
-
那么你要找的就是所谓的数据序列化。看看 Storable 模块。 metacpan.org/pod/Storable
-
但这意味着数据将为每个子进程复制到内存中如果我在bloomfilter中有4000万条记录和50个子进程,那么内存消耗将是巨大的
-
你是如何创建子进程的?
fork使用写时复制,因此如果您在分叉之前将数据加载到父进程中并且之后不修改它,那么所有子进程都应该可以访问它而不会占用您的内存。
标签: perl bloom-filter