文档章节

MongoDb数据库使用初体验及海量数据导入

 人称刚子
发布于 2017/08/10 20:58
字数 2022
阅读 22
收藏 0
点赞 0
评论 0

一 简介

关于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
作品 0
大数据分析挖掘学习方向?数据分析师的就业前景怎么样?

加米谷数据分析挖掘课程明细,从理论到云端实操环境到项目实战,手把手教您从0掌握数据分析与挖掘技术,带您走进数据时代。 第一阶段(python基础) python入门:1、Python版本特性介绍2、P...

加米谷大数据 ⋅ 04/17 ⋅ 0

如何在Ubuntu 18.04 LTS上安装和配置MongoDB

如何在Ubuntu 18.04 LTS上安装和配置MongoDB IMCN 18分钟前暂无评论 阅读 9 次 MongoDB是一款非关系型数据库,提供高性能,高可用性和自动扩展企业数据库。 MongoDB是一个非关系型数据库,因...

IMCN ⋅ 05/05 ⋅ 0

MongoDB 4.0 RC 版本强势登陆

MongoDB 因其灵活的文档模型、可扩展分布式设计广受开发者喜爱,在此基础上,MongoDB 4.0 推出了更强大的功能支持,目前4.0第一个RC版本已经发布,本文将介绍 MongoDB 4.0 核心的一些新特性。...

张友东 ⋅ 05/30 ⋅ 0

MongoDB 3.0新特性概述

MongoDB 在 2015年3月3日 跳过了 MongoDB 2.8版本,直接在 MongoDB 2.6版本后,发布了MongoDB 3.0版本。 随后在 2015年3月17日 发布了 MongoDB 3.0.1 版本; 在 2015年4月9日发布了 MongoDB ...

xinsir999 ⋅ 05/02 ⋅ 0

Docker MongoDB 部署

MongoDB 是一款较为常用的NOSQL 数据库,结合 Docker 使用,能实现轻松配置部署、迁移,本文以下为简要介绍如何在 Docker 中部署并使用 MongoDB。下文主要分为几个部分,内容如下: MongoDB ...

speculatecat ⋅ 04/06 ⋅ 0

简洁易用的 Play Framework MongoDB 模块 - Play-Mongo

play-mongo 介绍 play-mongo 是一个专门为 Play Framework 开发的 Mongodb 模块, 旨在为 Play Framework 提供一种简洁的 Mongodb 访问方式。 该项目基于 Mongodb 官方的 Mongodb Scala Driv...

joymufeng ⋅ 06/10 ⋅ 0

mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、等等)

最后更新时间:2017-07-13 11:10:49 原始文章链接:http://www.lovebxm.com/2017/07/13/mongodb_primer/ MongoDB - 简介 官网:https://www.mongodb.com/ MongoDB 是一个基于分布式文件存储的...

Airship ⋅ 06/01 ⋅ 0

Node后台|数据库的安装及使用(简版)

MAC 安装mongoDB 启动 mongoDB 判断mongoDB是否已经开启 关闭 mongoDB的服务 mongodb启动成功后会显示 然后我们去看看node如何连接mongodb node 连接mongoDB需要用到 mongoose 如果连接成功的...

贝一平 ⋅ 05/30 ⋅ 0

redis, memcached, mongo性能比较

1、性能 都比较高,性能对我们来说应该都不是瓶颈 总体来讲,TPS方面redis和memcache差不多,要大于mongodb 2、操作的便利性 memcache数据结构单一 redis丰富一些,数据操作方面,redis更好一...

无精疯 ⋅ 04/23 ⋅ 0

2018-06-02 MongoDB 数据库备份及恢复的Lazy & Fast方法

此处无导言、序言及导语。 Mongodump 导出整个库 比如将test库导出至当前目录的output子目录 注意:mongodump为mongo提供的一个命令行工具,非mongodb shell脚本命令,需在系统的shell环境执...

杨梅泡酒 ⋅ 06/02 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mysql in action / alter table

change character set ALTER SCHEMA `employees` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci ;ALTER TABLE `employees`.`t2` CHARACTER SET = utf8mb4 , COLLAT......

qwfys ⋅ 今天 ⋅ 0

Java 开发者不容错过的 12 种高效工具

Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松。目前,市面上涌现出越来越多的高效编程工具。所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用...

jason_kiss ⋅ 昨天 ⋅ 0

Linux下php访问远程ms sqlserver

1、安装freetds(略,安装在/opt/local/freetds 下) 2、cd /path/to/php-5.6.36/ 进入PHP源码目录 3、cd ext/mssql进入MSSQL模块源码目录 4、/opt/php/bin/phpize生成编译配置文件 5、 . ./...

wangxuwei ⋅ 昨天 ⋅ 0

如何成为技术专家

文章来源于 -- 时间的朋友 拥有良好的心态。首先要有空杯心态,用欣赏的眼光发现并学习别人的长处,包括但不限于工具的使用,工作方法,解决问题以及规划未来的能力等。向别人学习的同时要注...

长安一梦 ⋅ 昨天 ⋅ 0

Linux vmstat命令实战详解

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令...

刘祖鹏 ⋅ 昨天 ⋅ 0

MySQL

查看表相关命令 - 查看表结构    desc 表名- 查看生成表的SQL    show create table 表名- 查看索引    show index from  表名 使用索引和不使用索引 由于索引是专门用于加...

stars永恒 ⋅ 昨天 ⋅ 0

easyui学习笔记

EasyUI常用控件禁用方法 combobox $("#id").combobox({ disabled: true }); ----- $("#id").combobox({ disabled: false}); validatebox $("#id").attr("readonly", true); ----- $("#id").r......

miaojiangmin ⋅ 昨天 ⋅ 0

金山WPS发布了Linux WPS Office

导读 近日,金山WPS发布了Linux WPS Office中文社区版新版本,支持大部分主流Linux系统,功能更加完善,兼容性、稳定性大幅度提升。本次更新WPS将首次在Linux提供专业办公文件云存储服务,实...

问题终结者 ⋅ 昨天 ⋅ 0

springboot2输出metrics到influxdb

序 本文主要研究一下如何将springboot2的metrics输出到influxdb maven <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-bo......

go4it ⋅ 昨天 ⋅ 0

微信小程序 - 选择图片显示操作菜单

之前我分享过选择图片这个文章,但是我在实际开发测试使用中发现一个问题在使用 wx.chooseImage 选择照片显示出第一格是拍照,后面是相册里的图片。这种实现之前说过了,效果如下。 但是你从...

hello_hp ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部