我有一个哲学论据的大型数据集,每个论据都与其他论据相连,作为对给定陈述的证明或反证。一个根语句可以有许多证明和反证,每一个也可能有证明和反证。语句也可以用在多个图表中,并且可以在“给定上下文”或假设下分析图表。
我需要构建一个相关参数的贝叶斯网络,以便每个节点将影响公平准确地传播到它的连接参数;我需要能够同时计算连接节点链的概率,每个节点都需要数据存储查找,必须阻塞才能获得结果;该过程主要受 I/O 限制,我的数据存储连接可以在 java、go 和 python {google appengine} 中异步运行。每次查找完成后,它会将效果传播到所有其他连接的节点,直到概率增量降至不相关阈值以下{当前为 0.1%}。该过程的每个节点都必须计算连接链,然后将所有查询中的所有结果求和以调整有效性结果,并将结果向外链接到任何连接的参数。
为了避免无限重复,我正在考虑在 goroutines 中使用类似 A* 的过程来传播参数映射的更新,使用基于复合影响的启发式算法,一旦影响概率下降到 0.1% 以下,就会忽略节点。我曾尝试使用 SQL 触发器来设置计算,但它变得复杂和混乱的方式太快了。然后我转到google appengine来利用异步nosql,它更好,但仍然太慢。我需要以足够快的速度运行更新以获得一个简洁的 UI,因此当用户创建或投票赞成或反对证明或反驳时,他们可以立即看到结果反映在 UI 中。
我认为 Go 是支持我需要的并发性的首选语言,但我愿意接受建议。客户端是一个单一的 JavaScript 应用程序,它只使用 XHR 和 websockets 来实时推送和拉取参数映射{及其更新}。我有一个 java 原型,可以在 10~15 秒内计算出大型链,但对性能的监控表明,我的大部分运行时间都浪费在了同步和 ConcurrentHashMap 的开销上。
如果还有其他高并发语言值得尝试,请告诉我。我知道 java、python、go、ruby 和 scala,但如果适合我的需要,我会学习任何语言。
同样,如果有大型贝叶斯网络的开源实现,请留下建议。