我目前正在设计一个应用程序,该应用程序具有一个模块,该模块将从数据库中加载大量数据,并根据情况通过各种计算将其减少到更小的集合。
许多更密集的操作具有确定性,并且适合并行处理。
如果我有一个循环遍历从数据库到达的大量数据块,并且每个数据块都调用一个没有副作用的确定性函数,我将如何制作它以便程序不等待函数返回而是设置下一个电话,所以他们可以并行处理?一种天真的方法来证明这个原则现在对我有用。
我已经阅读了 Google 的 MapReduce 论文,虽然我可以在很多地方使用总体原理,但我现在不会针对大型集群,而是将其作为 1.0 版的单个多核或多 CPU 机器. 所以目前,我不确定我是否可以真正使用该库,或者自己必须推出一个简化的基本版本。
我处于设计过程的早期阶段,到目前为止,我将 C-something(用于速度关键位)和 Python(用于生产力关键位)作为我的语言。如果有令人信服的理由,我可能会切换,但到目前为止我对我的选择感到满意。
请注意,我知道从数据库中检索下一个块可能比处理当前块需要更长的时间,然后整个过程将受 I/O 限制。但是,我现在假设它不是,并且在实践中使用数据库集群或内存缓存或其他东西在这一点上不受 I/O 限制。