我正在寻找设计方法的指导,以解决我们在应用程序中遇到的一个问题。
我们在Java应用程序中安排了作业,我们使用Quartz调度程序。我们的应用程序可以有数千个工作,执行以下操作:
要求是:
截至目前,我们在石英作业元数据中保留已处理文件的列表。但是这个解决方案多年来不具有可扩展性(并且取决于每天接收的文件数量,可能是每天100K),作业元数据(持续处理的文件列表)变得非常大,它开始给我们带来问题数据截断错误(在石英表中保留作业元数据时)和缓慢。
实现此要求的最佳方法是什么,并确保我们不处理以相同名称到达的重复文件?我们是否应该考虑在外部数据库中保留已处理文件列表而不是作业元数据的方法?如果我们使用单个外部数据库表来保存所有这些成千上万个作业的已处理文件列表,那么这些年份的表大小可能会变得非常大,这看起来不是最好的方法(但是在这种情况下,正确的索引可能会有所帮助)。 / p>
此处的任何指导均应予以赞赏。对于持续处理新文件的应用程序来说,它看起来像是一个常见的用例 - 因此寻找解决此问题的最佳方法。
答案 0 :(得分:0)
如果不处理重复文件对您来说至关重要,最好的方法是将文件名存储在数据库中。请记住,这可能会很慢,因为您将查询每个文件名,或者对所有新文件名进行大查询。
也就是说,如果您愿意处理可能重复的新文件,可以采取一些措施作为替代方案: