我们需要读取和计算不同类型的消息/在10 GB文本文件上运行一些统计信息,例如FIX引擎日志.我们使用Linux,32位,4位CPU,英特尔,在Perl中编码,但语言并不重要.
我在Tim Bray的WideFinder项目中找到了一些有趣的提示 .但是,我们发现使用内存映射本质上受到32位架构的限制.
我们尝试使用多个进程,如果我们使用4个CPU上的4个进程并行处理文件,这似乎更快.添加多线程会降低速度,这可能是因为上下文切换的成本.我们尝试更改线程池的大小,但这仍然比简单的多进程版本慢.
内存映射部分不是很稳定,有时在2 GB文件上需要80秒,有时需要7秒,可能来自页面错误或与虚拟内存使用相关的内容.无论如何,Mmap在32位架构上无法扩展到4 GB以上.
我们尝试了Perl的IPC :: Mmap和Sys :: Mmap.看看Map-Reduce也是如此,但问题实际上是I/O绑定,处理本身就足够快了.
所以我们决定尝试通过调整缓冲大小,类型等来优化基本I/O.
任何知道现有项目的人都可以在任何语言/平台上有效地解决这个问题,指向有用的链接或建议方向吗?
是否可以将网站内容 - 一组HTML页面 - 直接下载到内存而无需写入磁盘?
我有一组机器,每台机器都安装了24G,但我受限于磁盘配额到几百MB.我想将输出重定向wget到某种内存结构而不将内容存储在磁盘上.另一种选择是创建我自己的版本,wget但可能有一种简单的方法来管道
此外,并行运行此下载的最佳方法是什么(群集有> 20个节点).在这种情况下无法使用文件系统.
使用按位运算符在非常长的字符串中查找子字符串的最快(并行?)方法是什么?
例如,在人类基因组中查找"GCAGCTGAAAACA"序列的所有位置http://hgdownload.cse.ucsc.edu/goldenPath/hg18/bigZips/hg18.2bit(770MB)
*字母表由4个符号组成('G','C',T,'A'),用2位表示:'G':00,'A':01,'T':10,'C':11
*您可以假设查询字符串(较短的字符串)的长度是固定的,例如127个字符
*最快我的意思是不包括任何预处理/索引时间
*文件将在预处理后加载到内存中,基本上会在更大的字符串中搜索数十亿个短字符串,全部在内存中.
*按位,因为我正在寻找最简单,最快速的方法来搜索大型阵列中的位模式,并尽可能保持与硅的接近.
*由于字母表很小,KMP不会很好用
*C代码,x86机器代码都很有趣.
输入格式说明(.2bit):http://jcomeau.freeshell.org/www/genome/2bitformat.html
有关:
即是否可以使字段需要类似于ProtoBuf:
message SearchRequest { required string query = 1; }
哪个命令行实用程序可以漂亮打印具有多行的文件(每个行以json编码)
输入文件:msgs.json:
[1,{"6":7,"4":5}]
[2,{"6":7,"4":5}]
Run Code Online (Sandbox Code Playgroud)
似乎json.tool只能使用单个JSON消息
编辑:在下面的答案中修改了json.tool以支持多个JSON消息
示例用法:
python myjson.py msgs.json
[
1,
{
"4": 5,
"6": 7
}
]
[
2,
{
"4": 5,
"6": 7
}
]
Run Code Online (Sandbox Code Playgroud)