首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否接受绩效福利的重复录入例外?

是否接受绩效福利的重复录入例外?
EN

Stack Overflow用户
提问于 2021-10-08 10:04:08
回答 1查看 36关注 0票数 0

我目前正在编写一个新闻API。为了获取新闻,我使用java从RSS提要(URL)列表中解析XML,并将它们写入mysql数据库。我以固定的时间间隔,即每5分钟这样做。

由于这些新闻提要通常与先前获取的内容相同或相似,因此我目前收到了许多重复条目异常。

代码语言:javascript
复制
2021-10-08 11:29:10.296  WARN 51007 --- [   scheduling-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 1062, SQLState: 23000
2021-10-08 11:29:10.296 ERROR 51007 --- [   scheduling-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : (conn=1850) Duplicate entry 'https://www.bild.de/regional/nuernberg/nuernberg-news/verwaltung' for key 'article.UK_o0bdhqfwhuu9g9y35687dmqhq'

我可以使用guid检查这些条目是否已经存在于数据库中,但是检查每个单独的项目在性能方面似乎很糟糕。

我还考虑在运行时检索所有文章并构建一个guid映射,以便判断数据库中是否存在文章,并避免大量的数据库调用。但很快就有超过10万篇文章让我忽略了这个选择。

如果我对性能的假设是错误的,我很高兴听到您将采用什么方法来解决这个问题。谢谢,提前!

这是我当前的实现

代码语言:javascript
复制
        for(SyndEntry syndEntry:feed.getEntries()){
            Article article = customMappingSyndEntryImplToArticle(syndEntry, rssFeed);
            try {
                articleRepository.save(article);
            } catch (DataIntegrityViolationException e) {
                log.error("Duplicate Record found while saving data {}", e.getLocalizedMessage());
            } catch (Exception e) {
                log.error("Error while saving data {}", e.getLocalizedMessage());
            }
        }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-10 01:37:54

你真的能分辨出两个文档是否是重复的?例如,我看过两篇相同的文章,标题不同。

因此,假设您可以告诉dup需要检查哪些部分,那么在包含新闻文章的表中创建一个UNIQUE索引。

但是,有一个问题-- UNIQUE的大小是有限的。特别是,任何文章的文本都可能超过该限制。

所以..。获取字符串的"hash“或"digest”。将其放在唯一列中。然后,当您尝试再次插入相同的文章时,您将得到一个错误。

好吧,这个“错误”可以通过说INSERT IGNORE ...来避免。

这个任务的一个简单而充分的散列是函数MD5() --它在SQL和大多数应用程序语言中都可用。它生成一个固定长度的字符串,几乎可以保证和它正在“消化”的文本一样唯一。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69494087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档