问题更多的是设计部分而不是编码。
我有一个包含移动号码的巨大文件,所以我们所做的是一次读取50个数字并更新数据库表startOffset=0
和endOffset=50
中的偏移量。
现在,开始逐个向号码发送短信,一旦完成,
从文件中挑选另外50个数字,并将Offset更新为startOffset=51
和endOffset=100
,现在开始发送短信,说我已经发送短信直到66偏移,问题出现时电源关闭或应用程序突然重启的原因。
现在当应用程序重新启动时,我不会知道我必须再次启动什么偏移(在我们的例子中是67)。我会知道我丢失了51到100块,所以我能做的就是从51开始再次发送短信但这是错误的,因为短信将被发送两次到我们已发送的号码。
另外,在发送每个短信后我可以这样做,将currentPointer
更新为DB,但这会使系统变慢。
有人可以建议最好的方法来做到这一点。
答案 0 :(得分:0)
如果要确保在重新启动时没有数字被处理两次,那么您需要为每个被处理的数字写入持久存储,无论是数据库还是文件。如果写入操作对您的要求执行速度太慢,请找到更快的方法来保留它,例如另一个表,文件或不同的数据库系统。
答案 1 :(得分:0)
运行发送消息并从Db读取两个不同的线程以提高性能。此外,您还需要为每个要处理的号码使用持久存储。