Database 使用什么数据库或存储引擎来存储许多独特的项目?

Database 使用什么数据库或存储引擎来存储许多独特的项目?,database,storage,Database,Storage,我正在考虑编写一个web爬虫程序,它只收集页面的URL,其他什么都不收集(对于一个归档项目),但我在找到一种适当的方法来存储结果方面遇到了问题 其要求是,无论使用什么存储引擎,都可以处理数十万项(最好能够向每个条目添加元数据,尽管不是必需的),并且可以忽略现有项(以避免重复),而不会对性能造成重大影响 我看过的引擎: MySQL:随着数据库的增大,检查现有项目的速度明显变慢 SQLite:与上面的问题相同,性能更差 memcache和Redis:数据集可能变得足够大,无法进行RAM存储 Mon

我正在考虑编写一个web爬虫程序,它只收集页面的URL,其他什么都不收集(对于一个归档项目),但我在找到一种适当的方法来存储结果方面遇到了问题

其要求是,无论使用什么存储引擎,都可以处理数十万项(最好能够向每个条目添加元数据,尽管不是必需的),并且可以忽略现有项(以避免重复),而不会对性能造成重大影响

我看过的引擎:

  • MySQL:随着数据库的增大,检查现有项目的速度明显变慢
  • SQLite:与上面的问题相同,性能更差
  • memcache和Redis:数据集可能变得足够大,无法进行RAM存储
  • MongoDB:不确定如果数据集的大部分存储在磁盘上,性能是否可以接受,这取决于

您对MongoDB的适用性有何看法(因为我没有在MongoDB中使用大型数据集的经验),您是否知道有更好的(免费)存储引擎用于此目的?

如果您使用传统的RDBMS,您可以基于数据的散列创建唯一密钥(例如:使用md5或sha1散列URL)。这将使唯一密钥保持较小(ish),并有助于提高性能

我喜欢PostgreSQL——你可能想用它做一些测试


编辑:(见评论)好的,也许在这个时代避免md5(:

听起来NoSQL解决方案很适合你

特别是因为您只想在某个地方将各种灵活的数据转储到URL的“id”下


我使用过lucene,但mongo也是一个不错的选择。

+1.一个完整的行业就是基于这样一个理念(重复数据消除)。但请不要使用MD5。@dmeister您对散列有何建议?SHA-256应该是一个不错的选择。MD5只会制造麻烦,因为我可以轻松计算散列冲突。这可能会导致问题(数据丢失、安全)是特定情况。虽然SHA-256仍有可能发生哈希冲突,但它们无法故意生成(2012年),并且非常、非常、非常不可能意外发生(生日悖论)。MongoDB会不会给内存不足的机器上的大型数据集带来问题?我不知道MongoDB的具体情况,但我记得它(大部分?)是从RAM运行的。我们谈论的RAM有多小?这足以运行nosql数据库了