代码之家  ›  专栏  ›  技术社区  ›  Susheel Javadi

扩展数据库绑定的系统?

  •  1
  • Susheel Javadi  · 技术社区  · 16 年前

    以下是场景和一些建议的解决方案。

    有一个系统a必须“分析”大量的网址。 另一个SystemB生成这些URL—目前数据库中有大约1000万个URL。

    id URL has_extracted
    1 abc.com 0
    2 bit.ly  1
    

    我的解决方案如下:

    天真的解决方案:有一个perl脚本/进程,它将URL(从数据库)提供给systemb,并更新has_extracted列 这种方法的问题在于它不能很好地扩展。

    解决方案2:将数据库拆分为五个(或n个)表。

    解决方案3: 删除has_提取列 创建另一个表来维护/跟踪每个进程跟踪的最后一个URL。

    3 回复  |  直到 16 年前
        1
  •  1
  •   Shachar    16 年前

    如果要运行systema的多个实例,可以使用hash函数将输入数据分成组,其中systema的每个instance只使用一个组。

    如果系统a的实例数是恒定的,例如17个,则可以使用函数 id%17 作为哈希函数。

        2
  •  0
  •   Vladislav Rastrusny    16 年前

    我认为可以这样做:

    1. URL生成器(1个或多个)
    2. URL堆栈(1个)

    URL处理者参考URL堆栈,为他们提供下一个要处理的URL。URL堆栈提供URL并将其标记为给定或删除。当URL处理器处理完一个URL时,它再次查询URL堆栈,并说它已经处理完URL1并希望处理URL2。然后,URL堆栈可以从列表中标记/删除URL1并给出URL2。

    如果可以的话,可以把URL堆栈缩小。

        3
  •  0
  •   Susheel Javadi    16 年前

    不知怎么的,我觉得我的问题和上面的问题很相似 link (摘录如下)。上述环节中的解决方案及本 link -“数据库在消息传递方面很糟糕”给了我一个更好的方向来实现更好的解决方案。

    摘录: 所以你想建立一个系统来完成任务。您希望这些作业能够并行运行,以提高速度,但也需要冗余。这个系统需要协调,例如,相同的作业不会被执行两次,每个作业的状态都很容易看到,多个服务器可以通过简单地查询中心源来运行作业。