我们需要建立一个系统,使多个进程可以在同一数据集上工作。该想法是拥有一组元素(即没有重复值),可以由我们的工作进程(异步方式)获取。这些进程可能分布在几台服务器上,因此我们需要一个分布式解决方案。
目前,我们考虑使用 Redis 来保存集合,其中保存着工作数据。每个进程应连接到该集合,并从中弹出一个值。`spop` 函数的随机功能实际上对我们来说是一个优点,因为我们需要随机访问集合中的元素。数据需要从我们的主 PostgreSQL 数据库进行填充。
正如我所说的,我们还可以查询可用的 PostgreSQL 数据库,进程可以在请求元素时访问它。但是,我们不知道在重载情况下是否会成为瓶颈。我们预计这个子系统将会有大量 - 非常大量的并发访问(考虑到数百甚至数千个进程)。
如果这与任何相关信息有关,我们正在使用 Python 和 `rQ` 来处理异步任务(作业和工作进程)。
编辑:就大小而言,元素不应很大 - 最大大小应该在 500-1000 字节左右。它们基本上都是 URL,因此除非发生奇怪的事情,否则它们应该远远小于该大小。元素数量将取决于并发进程的数量,因此大约 10-50K 元素可能是一个很好的基准。请记住,这更像是一个分段区域,因此应该关注速度而不是大小。
我的问题总结如下:
1. 当使用多个进程时,Redis 集合是否是共享访问的好方法?有哪些数据可以告诉我们该解决方案的规模?如果可以,请提供指针或建议。 2. 填充共享数据时,什么是一个好的更新策略?
非常感谢!
目前,我们考虑使用 Redis 来保存集合,其中保存着工作数据。每个进程应连接到该集合,并从中弹出一个值。`spop` 函数的随机功能实际上对我们来说是一个优点,因为我们需要随机访问集合中的元素。数据需要从我们的主 PostgreSQL 数据库进行填充。
正如我所说的,我们还可以查询可用的 PostgreSQL 数据库,进程可以在请求元素时访问它。但是,我们不知道在重载情况下是否会成为瓶颈。我们预计这个子系统将会有大量 - 非常大量的并发访问(考虑到数百甚至数千个进程)。
如果这与任何相关信息有关,我们正在使用 Python 和 `rQ` 来处理异步任务(作业和工作进程)。
编辑:就大小而言,元素不应很大 - 最大大小应该在 500-1000 字节左右。它们基本上都是 URL,因此除非发生奇怪的事情,否则它们应该远远小于该大小。元素数量将取决于并发进程的数量,因此大约 10-50K 元素可能是一个很好的基准。请记住,这更像是一个分段区域,因此应该关注速度而不是大小。
我的问题总结如下:
1. 当使用多个进程时,Redis 集合是否是共享访问的好方法?有哪些数据可以告诉我们该解决方案的规模?如果可以,请提供指针或建议。 2. 填充共享数据时,什么是一个好的更新策略?
非常感谢!