MongoDb数据库使用初体验及海量数据导入
MongoDb数据库使用初体验及海量数据导入
人称刚子 发表于5个月前
MongoDb数据库使用初体验及海量数据导入
  • 发表于 5个月前
  • 阅读 15
  • 收藏 0
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

摘要: 简单介绍了mongodb的基本安装和使用命令。通过实例对海量数据的导入以及使用mongodb的geohash特性实现经纬度查找进行说明

一 简介

关于Mongodb的介绍,网上一搜会有很多,本篇主要对工作中涉及到的具体使用进行简单介绍。本篇主要以Linux系统为例进行说明

二 安装

下载地址:https://www.mongodb.com/download-center#community

下载完安装包,并解压 tgz  : tar -zxvf mongodb-linux-x86_64-3.0.6.tgz

将解压文件夹移动到指定目录(以/usr/local/mongodb为例):

mv mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb

MongoDB 的可执行文件位于 bin 目录下,所以可以将其添加到 PATH 路径中:

export PATH=/usr/local/mongodb /bin:$PATH

mongodb数据库的数据文件默认存储在/data/db/目录下,但安装时(或第一次启动时)不会自动创建该目录,所以需要手动创建。同时需要说明的是,数据文件的存储位置也是可以通过配置文件进行制定的,下面会进行说明。

创建数据文件存储目录:mkdir -p /data/db

 

 

三 使用

下面就具体说明一下Mongodb的相关使用命令

3.1 启动服务

直接启动

进入到mongodb安装目录的bin文件夹下,这里有一些启动脚本。mongod即是服务启动脚本。

直接运行 ./mongod 或 sh mongod 即可启动服务

 

如上图所示,如出现最后一行表明服务已经启动(默认端口27017)。

但这种方式启动后会发现是在“前台”启动的,只要退出(ctrl+c)服务就停止了。所以需要使服务在后台运行。

 

使用配置文件启动

配置文件中有很多可以设置的参数,这里只对基本参数配置进行说明。

#数据库数据存放目录

dbpath=/data/db

#数据库日志存放目录

logpath=/data/dblog/dblog.log

#以追加的方式记录日志

logappend = true

#mongodb绑定的IP地址,只允许绑定的ip地址访问

bind_ip = 127.0.0.1

#端口号 默认为27017

port=27017

#以后台方式运行进程

fork=true

#开启用户认证

auth=true

#关闭http接口,默认关闭http端口访问

nohttpinterface=true

#启用日志文件,默认启用

journal=true

#这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false

quiet=true

 

使用配置文件进(将上述信息保存为 mongo.conf 放到bin目录下)行启动:

./mongod -f mongo.conf

由上图可以看出,服务已经在后台运行了

 

3.2 停止服务

说了启动,就说下如何停止。

停止服务有多种方式,可以使用kill命令直接将服务进程杀掉,如kill -9 20885 ,但这样可能会导致服务出现不能预知的异常情况,所以不推荐。

在这里说下使用mongo客户端命令停止服务

运行 ./mongo 命令,进入客户端,然后依次运行:

> use admin  //use 是切换命令,只有进入admin 数据库下才能使用shutdownServer()命令

> db.shutdownServer()

服务即停止。

由上图可以看出,db.shutdownServer()命令运行完之后客户端尝试重连,然后失败了,说明服务已经停止了。

 

3.3 数据库

启动mongodb 客户端,进入命令行模式

>./mongo

##使用指定当前名称的”数据库“,如果指定数据库不存在,则mongodb 会创建一个指定名称的数据库。

>use mydb 

##显示数据库 新创建的数据库由于数据库中是空的,此时不会显示

>show dbs

##删除数据库

>use mydb                                ---切换到要删除的数据库

>db.dropDatabase()                  --删除当前数据库

 

3.4 创建集合

 

db.createCollection("mycol", { capped : true, autoIndexId : true, size : 6142800, max : 10000 })

mycol :创建的集合名称

capped:       Boolean  (可选)如果为true,则启用封顶集合。封顶集合是固定大小的集合,会自动覆盖最早的条目,当它达到其最大大小。如果指定true,则需要也指定尺寸参数

autoIndexId:       Boolean  (可选)如果为true,自动创建索引_id字段的默认值是false。

size  number:(可选)指定最大大小字节封顶集合。如果capped是 true,那么你还需要指定这个字段。 capped collection最大存储为1e9( 1X109)个字节。

max number:      (可选)指定封顶集合允许在文件的最大数量。

由于我需要的集合是不封顶的,所以使用以下命令

>./mongo

>use mydb

> db.createCollection("mycol", {autoIndexId : true })

显示集合

show collections

此时再使用 show dbs命令时便可看到之前创建的数据库

删除集合

db.mycol.drop()

 

3.5 数据导入

        Mongodb是文档数据库,数据库中数据以文档的形式进行存储。文档是一组键值(key-value)对(即BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。BSON可以看做是一种类json格式的数据。如果存储的数据都是字符串或数字的话,可以视为同json一样。本人此次用到数据即是这种。

        Mongodb提供了数据导入工具,可以直接通过该工具将准备好的数据文件导入到指定的数据库集合中。

        现在有必要对本次的工作背景进行一个简单的介绍了。本次工作主要是将1亿条经纬度数据导入到mongodb数据库中,利用mongodb的geohash 特性开发LBS应用。因此要导入的数据中需要包含经纬度信息(point)和根据经纬度要查询的信息(v)。至于mongodb默认的索引_id字段在本次的工作中也有特殊含义,所以_id属性值也是提前生成好的,格式如下:

{

    "_id" : "0_0_21",

    "v" : 440823,

    "point" : {

        "longitude" : 121.3449,

        "latitude" : 31.17528

    }

}

当然,正式的数据文件中每行是一条记录,即:

{"_id" : "0_0_21","v" : 440823, "point" : {"longitude" : 121.3449, "latitude" : 31.17528}}

 

好,数据文件准备好了,下面要通过工具进行导入了。

所谓工具,其实就是mongodb提供的一个命令,

./mongoimport -d mydb -c mycol --file /home/json.txt

-d mydb:指定数据库

-c mycol:指定集合

--file:指定数据文件

然后就等数据导完吧~~~~~~~

这个命令的导入效率也基本在 数十万级/秒,当然也跟服务器配置有关

 

3.6 建立索引

        通过上一步,已将数据导入到mongodb中,小伙伴们是不是觉得大功告成了呢?NO!!!

        由于在创建集合时指定了自动创建索引,导入数据时,数据库会自动为_id创建索引,所以此时可以根据_id进行查询,如:db.basestation.find({'_id':’ 0_0_21’ })。但还没有对经纬度,即point创建索引,所以还不能实现通过经纬度查询的功能。

        要使用mongodb的geohash的特性,需要为经纬度创建特定的索引类型。包括“2d”和“2dsphere”两种。

2d 平面坐标索引,适用于基于平面的坐标计算。也支持球面距离计算,不过官方推荐使用2dsphere索引。

2dsphere 几何球体索引,适用于球面几何运算

两种类型创建索引的命令分别为:

db.basestation.ensureIndex({'coordinate':'2d'})

db.basestation.ensureIndex({'coordinate':'2dsphere'})

在此我使用了官方推荐的2dsphere索引

 

通过经纬度查询命令:

db.basestation.find({'point':{$nearSphere: [122.20201111, 30.02269936]}})

 

3.7 其它命令

查看连接数

> db.serverStatus().connections

{ "current" : 9, "available" : 52419, "totalCreated" : 10 }

 

创建用户

>use admin

>db.createUser(

 {

        user: "geo",

        pwd: "geo_0725",

        roles: [

            { role: "readWrite", db: "geo" }  

            ]

        }

    )

 

本次针对mongodb数据的介绍及数据的导入就到此为止,在下一篇中将会介绍mongodb与spring的整合。

 

参考:

http://www.runoob.com/mongodb/mongodb-tutorial.html

http://www.runoob.com/mongodb/mongodb-create-database.html

http://www.jb51.net/article/87695.htm

http://www.cnblogs.com/stephen-liu74/archive/2012/08/03/2553803.html

http://blog.csdn.net/congcong68/article/details/44545253

http://blog.csdn.net/huweijun_2012/article/details/51854228

http://blog.csdn.net/likui1314159/article/details/53284523

http://www.cnblogs.com/xuange306/p/6074078.html

共有 人打赏支持
粉丝 0
博文 2
码字总数 5531
×
人称刚子
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: