话说同志们在爬取数据的时候如何保存已经访问过的url和队列?对于爬取过的url,我使用redis的set来保存,访问队列是用list来保存,数据量是直线上升,内存不大,也只有4g,扛不住。不知道以前的方法是什么?
光阴似箭催人老,日月如移越少年。
キューイングやアクセスの判断にはMySQLを使用していますが、Redisの永続性があまり良くないことと、当時はRedisなどを使用することを考えていなかったので、現時点ではMySQLを使用することに問題はありません。いる。 具体的な方法は、URL の md5 値に一意のインデックスを付けることです。各クエリは高速で、テーブル構造は単純です。 キューの場合、テーブル検索の形式が使用され、SQL は次のとおりです (特定のステータスは何らかの自己定義ステータスを表します): select * from t_down_task where status = 0 ID 制限 1 で注文; 完了したタスクは定期的に削除します
http://en.wikipedia.org/wiki/Bloom_fi...
4G メモリでは、非常に大規模な BloomFilter を開くことができます。各 URL に必要なのは数ビットだけであり、URL の長さは関係ありません。 BloomFilter には一定のエラー率 (構成に応じて 1,000 分の 1 または 1 パーセントなど) があり、一部の Web ページが欠落しますが、繰り返しクロールされることはありません。
4G メモリで BloomFilter を開くだけでは不十分な場合、作成者はクロールされた Web ページを保存する方法を検討する必要があります。
データ量がそれほど大きくない場合、KV ストレージの md5 ハッシュ ストレージは比較的信頼性が高く、インデックスの量が多い場合は十分ではない可能性があるため、スペース圧縮を伴ういくつかの特別なアルゴリズムを使用する必要があります。上の人 ブルームフィルターについて言及しました
Memcache プロトコル http://code.google.com/p/mc-bloom-fil... を使用してこのアルゴリズム ストレージを実装している人もいます。
いくつかの永続的な k/v データベースを検討できますが、leveldb の使用をお勧めします。
これにはredisを使用せず、ファイルシステムを直接使用することをお勧めします
収集された URL は MD5 を通じて 16 進数の文字列に変換され、4 文字ごとにディレクトリの階層として使用され、最後の 4 文字がファイル名として使用されます。ファイルの内容は空でもかまいません。
トップブルームフィルター。これは次のように使用できます。leveldb を使用して URL を保存し、その後、クエリ時にライブラリにないほとんどの URL をブロックするためにBloomfilter を使用します。これはほぼ同じです。 lz はいくつの URL をクロールする必要がありますか? URL が数億など大量にあり、Hadoop を使用している場合は、Hadoop を使用して新しい URL と古い URL を重複排除することもできます。MapReduce は非常に高速です
キューイングやアクセスの判断にはMySQLを使用していますが、Redisの永続性があまり良くないことと、当時はRedisなどを使用することを考えていなかったので、現時点ではMySQLを使用することに問題はありません。いる。
具体的な方法は、URL の md5 値に一意のインデックスを付けることです。各クエリは高速で、テーブル構造は単純です。
キューの場合、テーブル検索の形式が使用され、SQL は次のとおりです (特定のステータスは何らかの自己定義ステータスを表します):
select * from t_down_task where status = 0 ID 制限 1 で注文;
完了したタスクは定期的に削除します
http://en.wikipedia.org/wiki/Bloom_fi...
4G メモリでは、非常に大規模な BloomFilter を開くことができます。各 URL に必要なのは数ビットだけであり、URL の長さは関係ありません。 BloomFilter には一定のエラー率 (構成に応じて 1,000 分の 1 または 1 パーセントなど) があり、一部の Web ページが欠落しますが、繰り返しクロールされることはありません。
4G メモリで BloomFilter を開くだけでは不十分な場合、作成者はクロールされた Web ページを保存する方法を検討する必要があります。
データ量がそれほど大きくない場合、KV ストレージの md5 ハッシュ ストレージは比較的信頼性が高く、インデックスの量が多い場合は十分ではない可能性があるため、スペース圧縮を伴ういくつかの特別なアルゴリズムを使用する必要があります。上の人 ブルームフィルターについて言及しました
Memcache プロトコル http://code.google.com/p/mc-bloom-fil... を使用してこのアルゴリズム ストレージを実装している人もいます。
いくつかの永続的な k/v データベースを検討できますが、leveldb の使用をお勧めします。
これにはredisを使用せず、ファイルシステムを直接使用することをお勧めします
収集された URL は MD5 を通じて 16 進数の文字列に変換され、4 文字ごとにディレクトリの階層として使用され、最後の 4 文字がファイル名として使用されます。ファイルの内容は空でもかまいません。
URL が収集されているかどうかを判断するには、現在の URL を直接 MD5 し、上記のルールに従ってファイル パスを生成し、ファイル パスが存在するかどうかを直接判断します。トップブルームフィルター。これは次のように使用できます。leveldb を使用して URL を保存し、その後、クエリ時にライブラリにないほとんどの URL をブロックするためにBloomfilter を使用します。これはほぼ同じです。
。lz はいくつの URL をクロールする必要がありますか? URL が数億など大量にあり、Hadoop を使用している場合は、Hadoop を使用して新しい URL と古い URL を重複排除することもできます。MapReduce は非常に高速です