设为首页 收藏本站
查看: 976|回复: 0

[经验分享] MongoDB数据库的安装和数据的批量导入(2014/4/1)

[复制链接]

尚未签到

发表于 2015-11-11 08:12:16 | 显示全部楼层 |阅读模式
服务器上MongoDB安装
  1  下载MongoDB数据库,官网地址:http://www.mongodb.org/downloads
  
  2  将下载好的安装包mongodb-linux-x86_64-2.4.9.tgz通过Xftp工具传到服务器上的特定目录下(如:/home/xp/usr/local)
  
  3  将压缩包解压,tar xzvf mongodb-linux-x86_64-2.4.9.tgz
  
  4  新建目录 mongodb 目录, 用来存放mongodb 数据库 和 日志文件
  命令:
  mkdir mongodb;
  cdmongodb;
  mkdir db;    // 存放数据库的文件夹
  mkdir log ;  //存放数据库日志文件的文件夹
  5        切换到解压好的 mongodb-linux-x86_64-2.4.9 目录下,进入 bin 目录
  
  6        执行 mongod 程序,该程序用来启动MongoDB的数据库服务器
  一般格式如下:
  ./mongod--dbpath=/home/xp/usr/local/mongodb/db  
  --logpath=/home/xp/usr/local/mongodb/log/MongoDB.log
  --logappend  
  --port=27017
  --fork
  参数解释:
  --dbpath:

    数据库的数据目录,即新建的mongodb/db文件夹。
  --port

    端口号,默认端口号是27017。
  --fork

    以守护进程的方式运行MongoDB。
  --logpath

    指定日志输出路径,而不是输出到命令行。如果对文件夹有写权限的话,系统会在文件不存在时创建它。它会将已有文件覆盖掉,清除所有原来的日志记录。如果想保留原来的日志,还需要使用--logappend选项。
  --logappend
  以append方式添加日志到日志文件。
  
  
  7        还可以设置开机自动启动。把启动mongodb的启动命令添加到/etc/rc.local即可,最好使用绝对路径。
  
  8        Mongod 程序正常启动会出现:
  
  
  
  about to fork child process, waiting untilserver is ready for connections.

forked process: 29517

all output going to: /home/xp/usr/local/mongodb-linux-x86_64-2.4.9/log

child process started successfully, parent exiting
  
  9        测试mongod 是否成功启动。
  检查端口是启动,端口为:27017
  命令:netstat –lanp | grep 27017
  在bin文件夹下,执行mongo查看安装是否成功。命令:./mongo
  
  10    启动mongod过程中遇到的错误。Erro number 如果显示为 1 ,则说明 权限不够,需要切换到root,再启动mongod 程序。
  
  
  11    常见mongodb数据库基本操作命令。
  了解mongodb数据库基本操作命令最简单的办法是进入mongo shell 后打开帮助系统。
  命令:
  >help
  >db.help()
  常见的命令有:
  1、show dbs
  显示当前数据库服务器上的数据库
  
  2、use my_mongodb
  切换到指定数据库my_mongodb的上下文,可以在此上下文中管理my_mongodb数据库以及其中的集合等
  
  3、show collections
  显示数据库中所有的集合(collection)
  
  4、db.serverStatus()  
  查看数据库服务器的状态
  
  5、db.user.insert()
  插入操作,对应关系数据库的insert操作。
  


  


  


  

数据批量导入MongoDB
  
  虽然mongodb数据库提供了导入数据的工具mongoimport,但由于mongodb只支持JSON和BSON格式的数据,所以要将只是以空格符为分隔符的数据通过mongoimport 导入数据库是不可行的。解决办法是用脚本批量插入,缺点是时间长。
  程序基本思路:1、连接数据库 2、对日志文件分析处理后逐条插入
  
  脚本使用python编写,需要预先安装pymongo包。
  其中很多输出显示不是必要的,可以删除。
  源码:

#!/usr/bin/env python
#encoding:utf-8
###################################
# function: analysis the log in the '.' dir to JSON , and
#output the data to the MongoDB.
# data:  2014/3/31
#History: 1.0
###################################
import os
import pymongo

def connect_mongodb():
servers="mongodb://localhost:27017"
conn = pymongo.Connection(servers)
print conn.database_names()
db = conn.my_mongodb            #连接库
return db
def str_process(string,db):
d={}
if string == '\n':
return
string2=str(string)
print '-----'+string
string2=string2.split(' ')
print '---------------'
print string2
for i in string2:
print i
print '------------'
string2[3].split('\n')
d['projectcode']=string2[0]
d['pagename']=string2[1]
d['pageview']=string2[2]
d['bytes']=string2[3][:-1]
db.user.insert(d)
def file_process(source_file,db):
string2=''
f=open(source_file,'r')
print 'file name :'+source_file
while True:
string2=f.readline()
if string2 == '':
break
string2=str_process(string2,db)
print string2
def get_dir_list(dir):  #input the dir ,will output the all filename
dat0=[]
for i in os.listdir(dir):
dat0.append(i)
return dat0
def all_file_process():
dir_file_name=''
dir_list=[]
dir_file_name=raw_input('please input the dir name:')
dir_list=get_dir_list(dir_file_name)
print dir_list
db=connect_mongodb()
for i in dir_list:
if str(i) != 'log_file_process.py':
file_process(str(i),db)
all_file_process()



  
  注意的地方:
  用的环境是用Xshell 连接到服务器,而且脚本执行周期长,最好使程序在后台跑。
  主要是可以防止网络掉线或关机,中断了数据的导入,导致需要重新执行程序。
  命令:
  nohup  ./log_file_process.py  &>/dev/null 2> &
  

版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-137681-1-1.html 上篇帖子: MongoDB数据库设计法则---part 1 下篇帖子: python 批量导入MongoDB数据库
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表