1、exceed quota
如果导入库时,库文件大小超过6.4g就报错exceed quota
,就删除mongodb.conf
中的这几行:
quota:
enforced: false
maxFilesPerDB: 8
鬼晓得啥原因,改false
没用,非得删了或加注释才能“配额无上限”
下面是一份完整的mongodb.conf
文件,记得改下数据和日志的存储位置:
systemLog:
destination: file
path: 'E:\Database\Logs\mongodb.log'
logAppend: true
quiet: true
storage:
dbPath: 'E:\Database\mongodb'
journal:
enabled: true
directoryPerDB: true
engine: mmapv1
mmapv1:
preallocDataFiles: true
nsSize: 32
# quota:
# enforced: false
# maxFilesPerDB: 8
smallFiles: false
journal:
debugFlags: 1
commitIntervalMs: 100
net:
bindIp: 127.0.0.1
port: 27017
setParameter:
enableLocalhostAuthBypass: false
#wiredTiger:
# engineConfig:
# cacheSizeGB: 10
# directoryForIndexes: true
# collectionConfig:
# blockCompressor: zlib
# indexConfig:
# prefixCompression: true
2、存储大量数据
不要insert_one
,而要insert_many
:
import os,re,time
from pymongo import MongoClient
# 数据库连接
client = MongoClient('mongodb://localhost:27017')
database = client.rmb
collection = database.testdb
# 添加数据
path = "E:\BaiduNetdiskDownload\8亿Q绑"
i = theSum = 0
start = lastTime = time.time()
def getPass():
collections = database.list_collections()
results = [1,2,3,4,5,6,7,8,9,10,33,34,35,36,37,38,39,40,]
for item in collections:
col = item['name']
if col.startswith("qqphone_"):
results.append(int(col.replace("qqphone_",""))+1)
results.sort()
thePass = []
for result in results:
thePass.append('6.9更新总库_%02d.txt' % result)
return thePass
files = os.listdir(path)[::-1]
for seq,file in enumerate(files):
exec("collection = database.qqphone_{}".format(39-seq))
thePass = getPass()
if file in thePass:
print("跳过文件:",file)
continue
with open(os.path.join(path,file)) as f:
lines = f.readlines()
thelen = len(lines)
print(file,"共"+str(thelen)+"条数据")
data = []
for line in lines:
if not line.strip():continue
info = re.match("(^\d+).*?(\d+$)",line.strip())
qq = info.group(1)
phone = info.group(2)
if len(phone) != 11:continue
data.append({
'qq':qq,
'num':phone,
})
length = len(data)
if length%100000 == 0:
theSum = theSum+length
collection.insert_many(data)
i = i+1
now = time.time()
print(str(i)+"0 万条,累计用时 "+"{:.1f}".format(now-start)+" 距离上次 "+"{:.1f}".format(now-lastTime)+" 进度 "+'{:.2f}%'.format(theSum/thelen*100))
lastTime = time.time()
data.clear()
collection.insert_many(data)
print("最后插入",len(data))
i = theSum = 0
print("*"*15,file,"*"*15)
3、备份与恢复
备份
mongodump.exe -h IP地址 --port 端口号 -d 数据库名 -o 备份路径
恢复
mongorestore.exe -h IP地址 --port 端口号 -d 数据库名 --dir 数据路径