因为本文是入门文档,所以废话较多,可以跳过直接看后面流程。
web开发最常用的数据库是关系型数据库,代表性的就是mysql和oracle。所谓关系型数据库,其实就是每个表为一个数据实体,在每个数据实体之间建立关系,而关系型数据库的范式就是对这个实体解耦程度的要求。可以看出来了,关系型数据库其实和面向对象的开发思想一脉相承,这种开发方式既和人的思维更接近,也更能发挥计算机的算力,从而更有效率的迭代出新的版本。
然而随着互联网的发展,互联网用户量和线上活跃数出现了爆发式的增长,大数据时代随之到来。传统的关系型数据库在某些方面变得力不从心,从java开发的角度来说,代码的初始就是根据需求进行表设计,然后通过表映射出实体对象,具体的业务逻辑由操作对象来实现,一旦表的字段(列)和实体对象不一致代码就会报错。而实际工作中,往往总会有变化需要新增或者修改表的列,也许可以通过设计冗余字段或者加班来解决这样的问题,但当面对大数据量高效率的业务场景时,以B+树遍历和序列化传输的传统方式导致的高耗低能就不能被忍受了。
俗话说,方法总比困难多,于是出现了各式各样的NoSQL产品,比如我们耳熟能详的redis,hbase,mongoDB,甚至是ElasticSearch。这里说明三点,一:NoSQL不是说没有SQL,而是Not only SQL,其实是SQL的增强,可以理解为SQL++。二:关系型数据库仍然占主导地位,具有不可替代的优越性。NoSQL只是在某些方面有独到的地方,是作为关系型数据库的补充。三:虽然都是NoSQL,但这些NoSQL的实现原理和侧重点都不同,简单来说redis和levelDB这种是以K/V结构存储数据数据,levelDB在持久化方面比较优秀,可以作为redis的补充。Hbase是面向列的数据库,在随机读写方面具有传统关系型数据库不可比拟的优势。MongoDb是文档型数据库,说是文档其实就是存的json,避免了以前前端请求一个简单的数据,后端多次访问数据库,数据格式转过来转过去。
下面进入正题。
一:客户端访问工具安装
windows端的mongoDB软件很多,但为了避免bug或者一些其他客观因素导致走弯路,这里还是推荐知名度比较高的navicat
Navicat for MongoDB下载地址:http://www.ddooo.com/softdown/130308.htm
呃,装软件没什么好说的,安装包里面有注册机,照着提示做就行,完成界面如下
二:mongo安装和运行
2.1mongo下载安装
docker search mongo : docker 搜索mongo镜像
docker pull mongo : 下载镜像
docker images : 查看下载的镜像
docker run -d -p 27017:27017 --name mongo mongo:latest 简单启动mongoDB,容器命名为mongo
docker exec -it mongo /bin/bash 进入mongo容器命令操作模式,查看镜像容器的目录结构
此时可以使用navicat for mongoDB访问了。
2.2使用docker compose安装mongo
docker network create --driver overlay app :创建一个名为app、驱动为overlay、作用域为swarm的网络
编辑dockercompose文件如下
version: "3.1"
services:
mongo:
image: docker.io/mongo:latest
restart: always
ports:
- 27017:27017
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: 1234
volumes:
- /home:/root/docker/mongo/data
- /etc/localtime:/root/docker/mongo/etc/localtime
networks:
- app
networks:
app:
external:
name: app
其中容易出错的地方就是volumes挂载的目录,确保此处填写的目录存在,可参考之前的docker exec -it进入容器查看。
将yml文件上传到到linux
docker stack deploy -c mongo.yml app : 通过stack方式启动mongo服务
docker stack ps app : 查看服务部署情况
如下图红框处
三:windows操作
使用navicat for MongoDB连接,如图
可以爽了。
mongo语法还是有点意思的,不过因为暂时用不着就不深追了。简单介绍下,mongoDB从高到底级别是:数据库-集合-文档
一般都以db开头,db.集合名/文档名.操作,如以下示例: