r - Redis是如何工作的?

标签 r parallel-processing redis cluster-computing r-doredis

我一直在研究 R interface to the redis database ,以及 doRedis foreach 的并行后端.我有几个问题,以帮助我更好地应用此工具:

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

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

谢谢!

最佳答案

拼图的一部分是 rredis

1 - doRedis使用 rredis。具体来说,doRedis.R 使用 redis:RPush (因为它遍历 foreach 项)并且每个 redisWorker 使用 redis:BRPopredis list 中获取一些东西(你在你的 doRedis “工作”中命名)。

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

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

3 - 使用环境参数。使用 Redis:Set所有 worker 都可以访问(通过 Redis:Get )。您在 foreach 端传递一个分隔表达式,该表达式设置在 string key in redis 中 worker 可以访问。

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

希望这对您有所帮助。

[附注远程登录到您的 redis 并发出 Redis:monitor命令来回监视喋喋不休。]

关于r - Redis是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5765326/

相关文章:

design-patterns - 领导者/追随者与工作队列

python - 特定于队列的 Celery 事件

r - 找到与条件不同的第一个前置值

c++ - RInside 和 Rcpp 的区别

c - pthreads C 程序在执行时挂起

django - 高可用性 Redis

python - redis, python 和一个存储信息

r - geom_text() 中超过 1 种颜色

r - 有没有一种方法可以 dplyr (tidyverse) 映射我的数据集,找到以相同后缀结尾的列,然后只保留一个?

c - 面向初学者的 OpenMP