我目前正在研究一个涉及索引大量文件的研究项目(240k); 它们主要是html,xml,doc,xls,zip,rar,pdf和文本大小从几KB到超过100 MB的文本.
在提取了所有zip和rar文件后,我最终得到了一百万个文件.
我正在使用Visual Studio 2010,C#和.NET 4.0,支持TPL Dataflow和Async CTP V3.要从这些文件中提取文本,我使用Apache Tika(使用ikvm转换),并使用Lucene.net 2.9.4作为索引器.我想使用新的TPL数据流库和异步编程.
我有几个问题:
如果我使用TPL,我会获得性能优势吗?它主要是一个I/O过程,据我所知,当您大量使用I/O时,TPL并没有提供太多好处.
生产者/消费者方法是否是处理此类文件处理的最佳方式,还是有更好的其他模型?我正在考虑使用blockingcollections创建一个包含多个使用者的生产者.
TPL数据流库是否适用于此类流程?看来TPL Dataflow最适合用于某种消息传递系统......
在这种情况下,我应该使用异步编程还是坚持同步?
我创建了一个应用程序,用电子邮件记录填充Neo4J数据库.我创建了两种类型的节点,人和邮件,我创建了4种类型的关系,发送,cc,到&reply_of.
现在我想找到两个没有直接连接的节点之间的关系.例如P1和P3之间(见图).
我怎样才能通过密码实现这一目标?它在neo4j中可行吗?

更新的问题:
首先让我澄清一下有关图片的内容......
Reply_OF关系是邮件节点之间的关系.它在原始邮件和转发邮件的任何回复之间创建关系.Sent,To,Cc和Bcc关系在人员节点和邮件节点之间创建关系.人员节点之间没有直接关系.
提交这个问题并阅读答案让我意识到我想知道其他的东西......我真正想知道的是我如何能够显示所有已经看过原始邮件的回复或转发邮件的人员节点原始邮件中的"收件人","抄送"或"密件抄送"列表.
我目前正在开发一个项目,我需要将数据批量导入Hadoop集群.需要导入Hadoop的数据驻留在SATA磁盘上.需要导入的数据是Encase取证磁盘映像(E01).我创建了一个从这些图像中提取文件并将这些文件导入Hadoop的应用程序,这种方法很好但我需要手动启动该过程.
我希望通过热插拔SATA驱动器自动完成该过程并自动启动提取过程.我用Java编写了我的程序,由于我用来分析图像的一些外部库,它需要这样.我在互联网上搜索了一个解决方案,其中Java用于检测新插入的驱动器,但我发现所有可以检测到usb驱动的库或使用udev规则来启动进程(我可以使用它但更喜欢Java解决方案)
有谁知道我所描述的东西是否存在?或者有人能指出我正确的方向吗?非常感谢!
差点忘了......我使用ubuntu 12.04 Server Edition作为我的操作系统.
我目前正在处理一个从大型二进制文件读取的应用程序,该文件包含数千个文件,每个文件都由应用程序中的其他类处理.该类返回一个对象或null.我想在主表单上显示进度但由于某种原因我无法理解它.
int TotalFound = 0;
var uiScheduler = TaskScheduler.FromCurrentSynchronizationContext;
BufferBlock<file> buffer = new BufferBlock<file>();
DataflowBlockOptions options = new DataflowBlockOptions(){ TaskScheduler = uiScheduler, };
var producer = new ActionBlock<someObject>(largeFile=>{
var file = GetFileFromLargeFile(largeFile);
if(file !=null){
TotalFound++;
buffer.post(file);
lblProgress.Text = String.Format("{0}", TotalFound);
}
}, options);
Run Code Online (Sandbox Code Playgroud)
上面的代码冻结了我的Form,即使我使用"TaskScheduler.FromCurrentSynchronizationContext",为什么?因为当我使用下面的代码时,我的表单更新很好
DataflowBlockOptions options = new DataflowBlockOptions(){ TaskScheduler = uiScheduler, };
var producer = new ActionBlock<someObject>(largeFile=>{
var file = GetFileFromLargeFile(largeFile);
if(file !=null){
Task.Factory.StartNew(() => {
TotalFound++;
buffer.Post(file);
}).ContinueWith(uiTask => {
lblProgress.Text = String.Format("{0}", TotalFound);
},CancellationToken.None, TaskContinuationOptions.None, uiScheduler);
} …Run Code Online (Sandbox Code Playgroud) 任何人都知道搜索包含多个值的字段的最佳方法是什么?
string tagString = "";
foreach(var tag in tags)
{
tagString = tagString += ":" + tag;
}
doc.Field(new Field("Tags", tagString, Field.Store.YES, Field.Index.Analyzed);
Run Code Online (Sandbox Code Playgroud)
假设我想搜索所有标记为"csharp"的文档,谁能最好地实现它?
c# ×3
tpl-dataflow ×2
async-ctp ×1
cypher ×1
file-io ×1
java ×1
linux ×1
lucene.net ×1
neo4j ×1
sata ×1