MongoDB数据库的安装和数据的批量导入(2014/4/1)

服务器上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> &

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值