应用程序重启时文件读取偏移量

时间:2015-05-09 09:05:13

标签: java oop java-ee

问题更多的是设计部分而不是编码。

我有一个包含移动号码的巨大文件,所以我们所做的是一次读取50个数字并更新数据库表startOffset=0endOffset=50中的偏移量。 现在,开始逐个向号码发送短信,一旦完成, 从文件中挑选另外50个数字,并将Offset更新为startOffset=51endOffset=100,现在开始发送短信,说我已经发送短信直到66偏移,问题出现时电源关闭或应用程序突然重启的原因。

现在当应用程序重新启动时,我不会知道我必须再次启动什么偏移(在我们的例子中是67)。我会知道我丢失了51到100块,所以我能做的就是从51开始再次发送短信但这是错误的,因为短信将被发送两次到我们已发送的号码。

另外,在发送每个短信后我可以这样做,将currentPointer更新为DB,但这会使系统变慢。

有人可以建议最好的方法来做到这一点。

2 个答案:

答案 0 :(得分:0)

如果要确保在重新启动时没有数字被处理两次,那么您需要为每个被处理的数字写入持久存储,无论是数据库还是文件。如果写入操作对您的要求执行速度太慢,请找到更快的方法来保留它,例如另一个表,文件或不同的数据库系统。

答案 1 :(得分:0)

运行发送消息并从Db读取两个不同的线程以提高性能。此外,您还需要为每个要处理的号码使用持久存储。