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> &

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章