【问题标题】:How to save state of a very complex and huge data processing?如何保存非常复杂且庞大的数据处理的状态?
【发布时间】:2014-01-09 17:06:57
【问题描述】:

考虑一个 A* 算法的实现。例如: A* implementation 假设输入图非常大,并且解决这段代码的时间足够长,以至于我想到了在这段代码之间崩溃的情况下进行故障恢复。故障可能是任何 - 软件/硬件等。 我不是在寻找代码,而只是针对此类恢复问题的常见解决方案的一些指示

【问题讨论】:

    标签: java failover recovery


    【解决方案1】:

    有几种选择:

    1. 您可以重写算法以支持错误恢复。 例如,您可以将其拆分为任务并将这些任务提交到队列中。 所以算法的主要部分只是从队列中获取任务并执行它们。 在执行期间,任务可能会提交额外的任务。 因此,要恢复,您只需要重复执行失败的任务即可。
    2. 执行字节码操作。 看看Javaflow 方法。 您可以在某个时间点暂停代码执行 然后你可以恢复它。 如果出现问题,您只需尝试从最后一点重复恢复。

    请注意,在某些情况下,算法实现会出现问题, 所以恢复是不可能的。 但是当外部组件出现问题时 (例如,您将某些内容存储在数据库中) 重复可能会有所帮助。 例如,数据库可能已关闭或与另一个事务存在写入冲突。

    【讨论】:

      【解决方案2】:

      当您遇到大型数据集的潜在故障时,通常使用冗余数据库。如果您绘制数据,您可能会喜欢使用 neo4j,它现在具有漂亮的界面,但也支持冗余,并且可以嵌入使用以最大限度地减少延迟。

      如果您只需要高吞吐量的持久复制,Java Chronicle 通过 TCP 复制支持每秒 5-20 百万条消息(最高可达网络带宽限制)

      如果您需要的 150 多个无 sql 数据库中没有一个适合您,您仍然需要实现类似它们的东西 http://nosql-database.org/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多