15

我一直在玩redis 数据库的 R 接口,以及foreach的doRedis并行后端。我有几个问题,以帮助我更好地应用此工具:

  1. doMC、doSMP、doSnow 等似乎都是通过调用同一台计算机上的工作进程,将列表中的元素和要应用的函数传递给它们,然后收集结果来工作的。在 doMC 的情况下,worker 共享内存。但是,对于数据库如何提供相同的功能,我有点困惑。
  2. 当我向 doRedis 作业队列添加额外的从属计算机时(如本视频所示),整个 doredis 数据库是否正在发送到从属计算机?或者每个从站只是它在特定时刻所需的数据(即列表的一个元素和要应用的函数)。
  3. 如何将额外的数据和函数显式传递给 doRedis 作业队列,每个从站都需要执行它的计算?
  4. 使用 doRedis 和 foreach 时,是否有其他可能不适用于其他并行后端的“陷阱”?

我知道这是很多问题,但我一直遇到这样的情况,即我对并行处理如何工作的有限理解阻碍了我实现它的能力。例如,我最近尝试在大型数据库上并行计算,发现自己将整个数据库传递到集群上的每个节点,这一操作完全破坏了我从并行化中获得的任何优势。

谢谢!

4

1 回答 1

15

一个难题是rredis

1 - doRedis使用 rredis。具体来说,doRedis.R 使用redis:RPush(因为它迭代了foreach项目)并且每个 redisWorker 使用redis:BRPopredis 列表(您在 doRedis “作业”中命名)中获取一些东西。

Redis 不仅仅是一个数据库。在这里它被用作队列!

2 - 您的所有 R 工作人员都可以(远程)访问 1 个实例。将 Redis 服务器视为分布式队列。您的工作主管将项目推送到列表,工作人员抓取并处理它并将其推送到结果列表。您可以为 N 个项目配备 m 个工人。取决于你想做什么。

3 - 使用环境参数。它使用所有工作人员都可以访问的Redis:Set (通过Redis:Get)。您在 foreach 端传递一个分隔表达式,该表达式设置在工作人员可以访问的 redis 中的字符串键中。

4 - 我不知道(但这几乎不是权威,所以请四处询问。)我还建议您阅读提供的源代码。上面的答案直接来自阅读doRedis.RredisWorker.R

希望这可以帮助。

[ps telnet 到你的 redis 并发出Redis:monitor命令来监视来回的喋喋不休。]

于 2011-04-24T02:12:32.763 回答