Maison > Questions et réponses > le corps du texte
话说同志们在爬取数据的时候如何保存已经访问过的url和队列?对于爬取过的url,我使用redis的set来保存,访问队列是用list来保存,数据量是直线上升,内存不大,也只有4g,扛不住。不知道以前的方法是什么?
ringa_lee2017-04-21 10:59:04
J'utilise MySQL pour faire la queue et déterminer s'il faut accéder. Étant donné que les caractéristiques de persistance de Redis ne sont pas très bonnes et que je n'ai pas pensé à utiliser Redis ou quoi que ce soit d'autre à l'époque, il n'y a aucun problème à utiliser MySQL pour. le moment étant.
La méthode spécifique consiste à indexer de manière unique la valeur md5 de l'URL. Chaque requête est rapide et la structure de la table est simple.
La file d'attente utilise la forme d'une recherche de table et le SQL est le suivant (le statut spécifique représente un statut auto-défini) :
sélectionnez * dans t_down_task où statut = 0 commande par limite d'identifiant 1 ;
Supprimez régulièrement les tâches terminées
怪我咯2017-04-21 10:59:04
http://en.wikipedia.org/wiki/Bloom_fi...
La mémoire 4G peut ouvrir un très grand BloomFilter. Chaque URL ne nécessite que quelques bits, quelle que soit la longueur de l'URL. BloomFilter a un certain taux d'erreur (par exemple un millième ou un pour cent, selon la configuration), ce qui entraînera l'omission de certaines pages Web, mais ne sera pas explorée à plusieurs reprises.
Si la mémoire 4G n'est pas suffisante pour ouvrir BloomFilter, l'auteur doit réfléchir à la manière de sauvegarder les pages Web explorées.
ringa_lee2017-04-21 10:59:04
Lorsque la quantité de données n'est pas très importante, le stockage de hachage md5 dans le stockage KV est relativement fiable. Si la quantité d'index est importante, elle peut ne pas être suffisante, c'est pourquoi certains algorithmes spéciaux avec compression d'espace doivent être utilisés, tels que. Le filtre bloom mentionné ci-dessus
Certaines personnes ont également implémenté cet algorithme de stockage grâce au protocole Memcache, http://code.google.com/p/mc-bloom-fil...
巴扎黑2017-04-21 10:59:04
Certaines bases de données k/v persistantes peuvent être envisagées, et je recommande d'utiliser leveldb.
ringa_lee2017-04-21 10:59:04
N'utilisez pas Redis pour ce faire, utilisez simplement le système de fichiers directement
L'URL collectée est convertie en chaîne hexadécimale via MD5, puis tous les 4 caractères sont utilisés comme répertoire, et les 4 derniers caractères sont utilisés comme nom de fichier. Le contenu du fichier peut être vide
.Pour déterminer si l'URL a été collectée, MD5 directement l'URL actuelle, générez le chemin du fichier selon les règles ci-dessus et déterminez directement si le chemin du fichier existe.
巴扎黑2017-04-21 10:59:04
Top bloomfilter. Il peut être utilisé comme ceci : utilisez leveldb pour stocker les URL, puis utilisez bloomfilter pour bloquer la plupart des URL qui ne sont pas dans la bibliothèque lors de l'interrogation. Cela devrait être presque la même chose.
Combien d’URL lz doit-il explorer ? S'il y a beaucoup d'URL, par exemple des centaines de millions, et si vous disposez de Hadoop, vous pouvez également utiliser Hadoop pour dédupliquer les nouvelles URL et les anciennes URL. MapReduce est très rapide