爬蟲資料結構複雜、關聯深,關聯式資料庫冗余嚴重,嘗試引入 MongoDB(文件型)與 Redis(記憶體型)對比效能。本文記錄在 Ubuntu 總控節點以**二進位套件(非 apt)**方式部署 MongoDB 3.0.5 與 Redis 3.0.3 的完整步驟、坑點與啟動腳本。
$ curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.5.tgz $ tar -zxvf mongodb-linux-x86_64-3.0.5.tgz $ mkdir -p ~/mongodb-3.0.5 $ cp -R mongodb-linux-x86_64-3.0.5/* ~/mongodb-3.0.5/
$ export PATH=~/mongodb-3.0.5/bin:$PATH $ mkdir -p ~/mongodb-3.0.5/data/db $ sudo chmod -R 777 ~/mongodb-3.0.5/data/db/
$ mongod --dbpath ~/mongodb-3.0.5/data/db --fork --logpath ~/mongodb-3.0.5/data/db/mongodb.log
預設 1024 過小,修改 /etc/security/limits.conf:
* soft nofile 3000 * hard nofile 20000 root soft nofile 3000 root hard nofile 20000
重啟機器生效,驗證 ulimit -n 顯示 3000。
#!/bin/sh
### BEGIN INIT INFO
# Provides: mongodb
# Required-Start: $local_fs $network
# Required-Stop: $local_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: MongoDB server
### END INIT INFO
. /lib/lsb/init-functions
PROGRAM=~/mongodb-3.0.5/bin/mongod
MONGOPID=$(ps -ef | grep 'mongod' | grep -v grep | awk '{print $2}')
case "$1" in
start)
ulimit -n 3000
log_begin_msg "Starting MongoDB server"
$PROGRAM --fork --quiet --journal --maxConns=2400 --rest \
--dbpath ~/mongodb-3.0.5/data/db \
--logpath ~/mongodb-3.0.5/data/db/mongodb.log
log_end_msg 0
;;
stop)
log_begin_msg "Stopping MongoDB server"
if [ ! -z "$MONGOPID" ]; then kill -15 $MONGOPID; fi
log_end_msg 0
;;
status) ;;
*) log_success_msg "Usage: /etc/init.d/mongodb {start|stop|status}"; exit 1 ;;
esac
exit 0
註冊開機自啟:sudo chmod +x /etc/init.d/mongodb && sudo update-rc.d mongodb defaults
$ ~/mongodb-3.0.5/bin/mongo
> db.foo.save({a:1})
> db.foo.find()
{ "_id" : ObjectId("..."), "a" : 1 }
遠端連線:mongo 192.168.x.x:27017
$ wget https://download.redis.io/releases/redis-3.0.3.tar.gz $ tar xzf redis-3.0.3.tar.gz $ cd redis-3.0.3 $ make
$ src/redis-server & $ src/redis-cli 127.0.0.1:6379> set foo bar OK 127.0.0.1:6379> get foo "bar"
redis.conf:bind、requirepass、maxmemory、maxmemory-policy allkeys-lru、appendonly yes、appendfsync everysec。apt-cache depends pkg # 查看依賴 apt-cache rdepends pkg # 查看反向依賴 apt-get build-dep pkg # 安裝編譯依賴 apt-get source pkg # 下載原始碼 apt-get clean && apt-get autoclean apt-get check # 檢查損壞依賴 # dpkg 鎖死急救 sudo rm /var/lib/dpkg/lock /var/cache/apt/archives/lock sudo rm /var/lib/dpkg/updates/* sudo apt-get update && sudo apt-get upgrade
| 中介軟體 | 定位 | 爬蟲場景建議 |
|---|---|---|
| MongoDB | 文件型持久化儲存 | 結構不固定的頁面解析結果、關聯圖譜、增量快照 |
| Redis | 記憶體高速快取/佇列 | 去重集合、待抓取 URL 隊列、計數器、分散式鎖、Session |
| MySQL | 關聯式核心業務 | 帳號、任務調度、結構化報表、財務資料 |
實測證實:MongoDB 寫入吞吐遠超 MySQL 於半結構化爬蟲資料;Redis 作為去重與隊列核心,延遲穩定 < 1ms。