我有一个Java应用程序,它是一种Web scraper。它解析了许多,让我们称之为行。关键是,在抓取网页时,检查某个网页上找到的行是否是新的,还是旧的(此时我会查询MySQL数据库以检查它是否存在)。如果它是新的,我将它放到一个单独的数组并执行另一个查询以将该行添加到数据库,因此在进行下一次抓取时,该行可以被识别为旧的。问题是,该网页有大约9万行,而且性能非常慢。有时MySQL服务器甚至会崩溃。
我希望您听到您的意见,我应该选择哪些选项(或者其他可能的东西):
非常感谢!
答案 0 :(得分:0)
您可以使用Apache Cassandra而不是mysql。它写得很快,你不需要缓存。如果在应用程序级别使用散列函数定义正确的唯一键,则可以避免写入之前的读取,这样,如果在同一旧页面和新页面上应用散列,则会产生相同的唯一键。你总是插入你不必阅读。
您也可以使用条件插入,但这会降低写入吞吐量,因为它必须对所有副本执行paxos共识。
答案 1 :(得分:0)
Mantain在记忆中有两个列表:
现在algorythm就像:
在此解决方案中,您将很少访问数据库。考虑将两个列表的大小限制在合理的维度,以解决内存错误问题。