我的其中一位队友建议使用Erlang来编写此程序。
我想在这里注意一些事情,我对函数式编程还很陌生,因此我有点怀疑是否Clojure是编写此程序的好选择,或者Erlang更合适。
这两种语言和运行时采用了不同的并发处理方法:
Erlang将程序结构化为许多轻量级进程彼此之间通信。在这种情况下,您可能会有一个主进程向许多工作进程和更多处理结果数据的进程发送作业和数据。
Clojure倾向于使用共同数据结构,使几个线程共享数据和状态。这听起来特别适合许多线程访问相同数据(只读)和共享很少可变状态的情况。
您需要分析应用程序以确定哪种模型最适合您。这也可能取决于您使用的外部工具-例如,数据库处理并发请求的能力。
另一个实际考虑因素是Clojure运行在JVM上,许多开源库都可以使用。
Clojure 是在 Java JVM 上运行的 Lisp 语言。Erlang 从基础开始就被设计成高度容错和并发。
我认为使用这两种语言及其他许多语言都可以完成任务。你的经验将取决于你对问题的理解程度以及你对语言的熟练程度。如果你对两者都是新手,那么无论你选择哪种语言,问题都会具有挑战性。
您有考虑过类似 Lucene/Solr 这样的软件吗?它是索引和搜索文档的绝佳软件。我不知道“交叉检查”对于您的上下文意味着什么,但这可能是一个值得考虑的好方案。
我的方法是在每种语言中编写一个简单的测试,并测试每种语言的性能。这两种语言与C风格语言有些不同,如果你不习惯它们(并且你没有一个熟悉它们的团队),你可能会遇到维护上的噩梦。
我还会考虑使用类似Groovy 1.8的东西。现在,Groovy包括GPars以实现并行计算。在Groovy中进行字符串和文件操作非常容易。
但是:
如果“巨大”意味着数十台分布式机器,那么使用Erlang并使用文本友好型语言(如Python?Perl?)编写工作进程。您将在顶部拥有高度并发的本地工作进程的分布式层。每个工作进程都由Erlang进程表示。如果需要更高的性能,请将工作进程重写为C。在Erlang中,与其他语言交互非常容易。
如果“巨大”仍然意味着一台强大的机器,请选择JVM。那就不算太大了。
如果“巨大”是数百台机器,我认为您需要像Google一样的更强大的东西(Bigtable、Map/Reduce),可能在C++堆栈上。Erlang仍然可以,但是您需要优秀的开发人员来编写它。