批量和批量处理的模式

时间:2009-11-18 09:52:04

标签: design-patterns batching

我从数据库查询的数据看起来很像以下

Job Site    File    List
-------------------------------
1   SiteA   file2.txt   2
2   SiteB   file2.txt   2
3   SiteA   file23.txt  23
4   SiteC   file2.txt   2
5   SiteB   file12.txt  12
6   SiteA   file29.txt  29
7   SiteB   file28.txt  28

我应该为每个站点(站点A,B和C)启动实例,然后进行处理,例如,对于siteA,处理file2.txt,file23.txt& file29.txt。这种“处理”可以按某种顺序发生,但必须一个接一个(不是同时发生)。

所以我的第一个任务是整理网站 - 并为每个网站创建实例。我该怎么做?

PS:我认为处理部分我应该使用某种迭代器模式......我更喜欢任何现代编译器语言的解决方案......比如c#,vb,c ++等...

3 个答案:

答案 0 :(得分:0)

我不确定我是否理解了你想要达到的目标,但我认为你需要做的是:

  1. 从您的数据中获取Site的不同值
  2. 对于在前一步骤中获得的每个值
    2.1。实例化网站
    2.2。获取File的所有关联值并处理每个值
  3. 在使用LINQ的C#中,它将是这样的:

    var siteNames=data.Select(d => d.Site).Distinct();
    foreach(var siteName in siteNames) {
        var site=new Site(siteName); //Or use a factory method, a sites list, etc
        var files=data.Where(d => d.Site==site).Select(d => d.File);
        foreach(var file in Files) {
            site.ProcessFile(file);
        }
    }
    

答案 1 :(得分:0)

我会有一个带有哈希表的访问者对象,它遍历每个条目。

每个条目: - 如果哈希表中不存在,则访问者对象将为其实例化一个站点。 - 然后对象将获取文件并进行处理。

这样做的好处是可以一次完成分组和处理。

答案 2 :(得分:0)

我赞同每个网站的工人的想法。

另一个问题 - 申请状态。

当你的应用程序启动它是否关心之前发生的事情?在处理了一些文件时,请考虑应用程序崩溃。大概重新启动应用程序将再次处理文件?这是一个问题吗?