MySQL和许多查询

时间:2015-04-08 09:43:50

标签: java mysql caching web bigdata

我有一个Java应用程序,它是一种Web scraper。它解析了许多,让我们称之为行。关键是,在抓取网页时,检查某个网页上找到的行是否是新的,还是旧的(此时我会查询MySQL数据库以检查它是否存在)。如果它是新的,我将它放到一个单独的数组并执行另一个查询以将该行添加到数据库,因此在进行下一次抓取时,该行可以被识别为旧的。问题是,该网页有大约9万行,而且性能非常慢。有时MySQL服务器甚至会崩溃。

我希望您听到您的意见,我应该选择哪些选项(或者其他可能的东西):

  1. 选择其他DBMS,如MongoDB或其他一些?
  2. 不要将行放到数据库中,而是使用一些缓存解决方案? (然后是什么解决方案?)
  3. 非常感谢!

2 个答案:

答案 0 :(得分:0)

您可以使用Apache Cassandra而不是mysql。它写得很快,你不需要缓存。如果在应用程序级别使用散列函数定义正确的唯一键,则可以避免写入之前的读取,这样,如果在同一旧页面和新页面上应用散列,则会产生相同的唯一键。你总是插入你不必阅读。

您也可以使用条件插入,但这会降低写入吞吐量,因为它必须对所有副本执行paxos共识。

答案 1 :(得分:0)

Mantain在记忆中有两个列表:

  • 已访问过的网页
  • 要访问的页面

现在algorythm就像:

  1. 阅读要访问的页面
  2. 从该页面和每个链接中提取链接
  3. 如果已访问过的页面中存在链接,则将其丢弃
  4. 如果要访问的页面中存在链接,则丢弃它
  5. 如果在已访问的页面中不存在,则在访问页面中访问数据库并进行搜索。如果在场丢弃它。如果不存在,则将其添加为数据库和内存列表中的访问页面。
  6. 从要访问的页面中删除当前页面并将其添加到已访问的页面
  7. 在此解决方案中,您将很少访问数据库。考虑将两个列表的大小限制在合理的维度,以解决内存错误问题。