我目前正在考虑如何最好地将网络爬取结果存储在数据库中。在另一个问题中,建议将面向文档的数据库用于网络爬虫项目:python 中的网络爬虫数据库?
现在我想知道 map/reduce 是否是这种分类和价值生成的正确方法。至少它似乎能够做这样的事情(地图仅用于分类,如年份或作者,地图/减少用于计算数值,我目前想不出一个例子)。
但是,map-reduce / DocumentStores 是否也能够为我提供给定单词的正确文档?在关系数据库中,我必须在某些表上使用 JOIN,然后获取包含这些单词的文档:
SELECT * FROM docs d
JOIN doc_words dw ON dw.doc_id = d.id
JOIN words w ON dw.word_id = w.id
WHERE w.word = 'foo'
我猜 DocumentStores 不能进行这样的操作,因为它们不支持全文索引并且不打算有很多引用/关系。
更好的选择是混合多个系统吗?例如,一个用于按单词搜索,一个用于按不同值(如果存在)搜索(如出版年份、作者……)?我认为 DocumentStores 对于存储元数据并不是那么糟糕,因为有时有特定的值,有时没有(如果需要,只要一个服务器的文档太多,DocumentStores 很容易在多个服务器上使用)。然而,我不确定实现搜索文档集合(包括网页、pdf、图像,它们总是具有不同的元数据,但通常还需要全文索引)的最佳方法是什么。
提出一个明确的问题:我应该将另一个数据库系统与 DocumentStores 一起使用,单独使用 DocumentStores(如何快速搜索单词?)还是单独使用另一个 DB 系统?
PS:此类问题的另一个例子是网页之间的链接,它也不能很好地保存在 DocumentStores 中。但是,OrientDB 可能会解决这个问题,因为它似乎结合了图形数据库和面向文档的数据库。