当前位置:网站首页>分布式文档存储数据库之MongoDB基础入门
分布式文档存储数据库之MongoDB基础入门
2020-11-08 11:26:00 【程序猿欧文】
一、MongoDB简介
MongoDB是用c++语言开发的一款易扩展,易伸缩,高性能,开源的,schema free 的基于文档的nosql数据库;所谓nosql是指不仅仅是sql的意思,它拥有部分sql的特性,同时又比sql的性能和扩展要好;所谓schema free指没有太多的约束,我们知道在关系型数据库中有很多约束和范式,在MongoDB中就没有,所以这里的schema free是指这个;mongodb支持海量数据,支持osx,linux,windows,solaris的32位和64位系统,基于GUN VGPL v3.0协议开源;
以上这张图反映了MongoDB和其他数据库的伸缩性和性能以及功能的一些比较;横轴代表数据库的功能,纵轴代表可伸缩性和性能;从上图坐标系可以看到关系型数据sql server/mysql的功能是最强大,但是对于伸缩性和性能来讲也是最低的;对于memcached来讲它的的伸缩性和性能是最好的,因为它不需与持久化存储数据,所有数据都在内存,同时它的功能也非常简陋,所以memcached的性能是最好的,但是功能是最简陋的;对于k/v键值数据库来讲,它的性能和伸缩性要略小于memcached,功能要比memcached要略多一点;对于MongoDB来讲,它要比memcached的性能和伸缩性要略小,但功能比它强很多,性能同k/v数据库不相上下,比关系型数据库的可伸缩性和性能都要高很多,同时对于关系型数据库的功能也相差不多;从上面的图可以看到mongodb是性能和扩展性要优于关系型数据,同时功能上也不输关系型数据库多少;正是因为mongodb的这些特性,相比其他nosql,MongoDB的使用量是排在第一的;
MongoDB和关系型数据
以上这张图主要对比了mongodb和关系型数据库中的数据库、表、行相关概念;在mongdb中的数据库和关系型数据库中的数据库类似,都是用来存放多张表格,但在mongodb中,没有表的概念,只有collection(对文档的集合);对于关系型数据库中的行,就相当于mongodb中的document(文档);在关系型数据库中多行数据组成一张表,多张表组成一个库;而在mongodb中是多个文档组成一个collection,多个collection组成一个库;如下图所示
MongoDB数据特点
1、mongodb是基于文档的关系型数据库,使用JSON的方式来存储数据;
2、schema-free
3、用c++语言编写,支持全面的索引,不支持事务(支持原子事务,或者说当行文档支持事务),基于内存映射文件,所以支持延迟写入,正因为这些特点,使得mongodb的性能优越;
4、支持副本机制,自动分片机制;所谓副本机制指当一个集群中的主节点挂掉以后,它能自动发现,并将其他一个从节点自动选举提升为主节点;
5、查询接口不支持sql,而是用JSON/Javascript表示的灵活的文档查询;
6、支持map/Reduce机制,它能够将数据map以后再做reduce,支持并行处理;
7、支持根据位置查找对象;
二、MongoDB安装
1、yum安装
配置yum源
[root@node01 ~]# cat /etc/yum.repos.d/mongodb.repo[mongodb-org]name = MongoDB Repositorybaseurl = https://mirrors.aliyun.com/mongodb/yum/redhat/7/mongodb-org/4.4/x86_64/gpgcheck = 1enabled = 1gpgkey = https://www.mongodb.org/static/pgp/server-4.4.asc[root@node01 ~]#
查看mogodb相关简介
[root@node01 ~]# yum info mongodb-orgLoaded plugins: fastestmirrorLoading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.comAvailable PackagesName : mongodb-orgArch : x86_64Version : 4.4.1Release : 1.el7Size : 5.9 kRepo : mongodb-orgSummary : MongoDB open source document-oriented database system (metapackage)URL : : SSPLDescription : MongoDB is built for scalability, performance and high availability, scaling from single server : deployments to large, complex multi-site architectures. By leveraging in-memory computing, MongoDB : provides high performance for both reads and writes. MongoDB’s native replication and automated : failover enable enterprise-grade reliability and operational flexibility. : : MongoDB is an open-source database used by companies of all sizes, across all industries and for a : wide variety of applications. It is an agile database that allows schemas to change quickly as : applications evolve, while still providing the functionality developers expect from traditional : databases, such as secondary indexes, a full query language and strict consistency. : : MongoDB has a rich client ecosystem including hadoop integration, officially supported drivers for : 10 programming languages and environments, as well as 40 drivers supported by the user community. : : MongoDB features: : * JSON Data Model with Dynamic Schemas : * Auto-Sharding for Horizontal Scalability : * Built-In Replication for High Availability : * Rich Secondary Indexes, including geospatial : * TTL indexes : * Text Search : * Aggregation Framework & Native MapReduce : : This metapackage will install the mongo shell, import/export tools, other client utilities, server : software, default configuration, and systemd service files.[root@node01 ~]#
安装mongodb-org
[root@node01 ~]# yum install mongodb-org -yLoaded plugins: fastestmirrorLoading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.comResolving Dependencies--> Running transaction check---> Package mongodb-org.x86_64 0:4.4.1-1.el7 will be installed--> Processing Dependency: mongodb-org-tools = 4.4.1 for package: mongodb-org-4.4.1-1.el7.x86_64--> Processing Dependency: mongodb-org-mongos = 4.4.1 for package: mongodb-org-4.4.1-1.el7.x86_64……省略部分内容……Installed: mongodb-org.x86_64 0:4.4.1-1.el7 Dependency Installed: cyrus-sasl.x86_64 0:2.1.26-23.el7 cyrus-sasl-gssapi.x86_64 0:2.1.26-23.el7 cyrus-sasl-plain.x86_64 0:2.1.26-23.el7 mongodb-database-tools.x86_64 0:100.2.0-1 mongodb-org-database-tools-extra.x86_64 0:4.4.1-1.el7 mongodb-org-mongos.x86_64 0:4.4.1-1.el7 mongodb-org-server.x86_64 0:4.4.1-1.el7 mongodb-org-shell.x86_64 0:4.4.1-1.el7 mongodb-org-tools.x86_64 0:4.4.1-1.el7 Dependency Updated: cyrus-sasl-lib.x86_64 0:2.1.26-23.el7 Complete![root@node01 ~]#
编辑配置文件/etc/mongod.conf将其配置为监听在非127.0.0.1地址
启动mongodb
[root@node01 ~]# systemctl start mongod.service [root@node01 ~]# ss -tnlState Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 *:27017 *:* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::* [root@node01 ~]#
提示:启动后请确保27017端口处于监听状态即可;
2、下载官方二进制包,解压安装
官方下载地址:https://www.mongodb.com/try/download/community;
提示:选择要下载的mongodb的版本和运行的系统平台以及对应包的格式,然后点击copy link复制下载链接地址;
[root@node02 ~]# cd /usr/local/src/[root@node02 src]# lltotal 0[root@node02 src]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.1.tgz--2020-11-07 19:59:32-- https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.1.tgzResolving fastdl.mongodb.org (fastdl.mongodb.org)... 13.35.121.42, 13.35.121.49, 13.35.121.114, ...Connecting to fastdl.mongodb.org (fastdl.mongodb.org)|13.35.121.42|:443... connected.HTTP request sent, awaiting response... 200 OKLength: 71253687 (68M) [application/gzip]Saving to: ‘mongodb-linux-x86_64-rhel70-4.4.1.tgz’100%[======================================================================>] 71,253,687 2.00MB/s in 43s 2020-11-07 20:00:19 (1.57 MB/s) - ‘mongodb-linux-x86_64-rhel70-4.4.1.tgz’ saved [71253687/71253687][root@node02 src]# lltotal 69584-rw-r--r-- 1 root root 71253687 Sep 8 22:55 mongodb-linux-x86_64-rhel70-4.4.1.tgz[root@node02 src]#
解压包,并创建软连接至/usr/local/mongodb
[root@node02 src]# lltotal 69584-rw-r--r-- 1 root root 71253687 Sep 8 22:55 mongodb-linux-x86_64-rhel70-4.4.1.tgz[root@node02 src]# tar xf mongodb-linux-x86_64-rhel70-4.4.1.tgz [root@node02 src]# ln -sv /usr/local/src/mongodb-linux-x86_64-rhel70-4.4.1 /usr/local/mongodb‘/usr/local/mongodb’ -> ‘/usr/local/src/mongodb-linux-x86_64-rhel70-4.4.1’[root@node02 src]# ll /usr/local/total 0drwxr-xr-x. 2 root root 6 Nov 5 2016 bindrwxr-xr-x. 2 root root 6 Nov 5 2016 etcdrwxr-xr-x. 2 root root 6 Nov 5 2016 gamesdrwxr-xr-x. 2 root root 6 Nov 5 2016 includedrwxr-xr-x. 2 root root 6 Nov 5 2016 libdrwxr-xr-x. 2 root root 6 Nov 5 2016 lib64drwxr-xr-x. 2 root root 6 Nov 5 2016 libexeclrwxrwxrwx 1 root root 48 Nov 7 20:03 mongodb -> /usr/local/src/mongodb-linux-x86_64-rhel70-4.4.1drwxr-xr-x. 2 root root 6 Nov 5 2016 sbindrwxr-xr-x. 5 root root 49 Sep 15 20:33 sharedrwxr-xr-x. 3 root root 92 Nov 7 20:03 src[root@node02 src]#
将/usr/local/mongodb/bin/*软连接至/usr/bin/
[root@node02 src]# ln -sv /usr/local/mongodb/bin/* /usr/bin/‘/usr/bin/install_compass’ -> ‘/usr/local/mongodb/bin/install_compass’‘/usr/bin/mongo’ -> ‘/usr/local/mongodb/bin/mongo’‘/usr/bin/mongod’ -> ‘/usr/local/mongodb/bin/mongod’‘/usr/bin/mongos’ -> ‘/usr/local/mongodb/bin/mongos’[root@node02 src]# mongomongo mongod mongos [root@node02 src]# mongo
启动mongodb
[root@node02 src]# mkdir -p /var/lib/mongo[root@node02 src]# mkdir -p /var/log/mongodb/[root@node02 src]# groupadd -g 995 mongod[root@node02 src]# useradd -u 996 -g mongod mongod[root@node02 src]# mongod --dbpath=/var/lib/mongo/ --logpath=/var/log/mongodb/mongod.log --bind_ip=0.0.0.0 --port=27017 --logappend --fork about to fork child process, waiting until server is ready for connections.forked process: 1594child process started successfully, parent exiting[root@node02 src]# ss -tnlState Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 *:27017 *:* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::* [root@node02 src]# ps axu |grep mongodroot 1594 4.8 3.8 1555604 72740 ? Sl 20:33 0:01 mongod --dbpath=/var/lib/mongo/ --logpath=/var/log/mongodb/mongod.log --bind_ip=0.0.0.0 --port=27017 --logappend --forkroot 1634 0.0 0.0 112812 972 pts/0 R+ 20:34 0:00 grep --color=auto mongod[root@node02 src]#
提示:这种方式是用root用户启动;
用mongod用户启动
[root@node02 src]# mongod --shutdown --dbpath=/var/lib/mongo/ --logpath=/var/log/mongodb/mongod.log --bind_ip=0.0.0.0 --port=27017 --logappend --forkkilling process with pid: 1594[root@node02 src]# ss -tnlState Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::* [root@node02 src]# chown -R mongod.mongod /var/log/mongodb/ [root@node02 src]# chown -R mongod.mongod /var/lib/mongo/ [root@node02 src]# su - mongod[mongod@node02 ~]$ mongod --dbpath=/var/lib/mongo/ --logpath=/var/log/mongodb/mongod.log --bind_ip=0.0.0.0 --port=27017 --logappend --forkabout to fork child process, waiting until server is ready for connections.forked process: 1697child process started successfully, parent exiting[mongod@node02 ~]$ ss -tnlState Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 *:27017 *:* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::* [mongod@node02 ~]$ ps aux |grep mongodroot 1671 0.0 0.1 191836 2340 pts/0 S 20:37 0:00 su - mongodmongod 1672 0.1 0.1 115940 2652 pts/0 S 20:37 0:00 -bashmongod 1697 6.3 3.7 1555916 69368 ? Sl 20:37 0:00 mongod --dbpath=/var/lib/mongo/ --logpath=/var/log/mongodb/mongod.log --bind_ip=0.0.0.0 --port=27017 --logappend --forkmongod 1738 0.0 0.1 155436 1868 pts/0 R+ 20:37 0:00 ps auxmongod 1739 0.0 0.0 112812 972 pts/0 S+ 20:37 0:00 grep --color=auto mongod[mongod@node02 ~]$
提示:关闭mongodb 使用--shutdown选项即可;
mongod 相关参数说明
--dbpath:用于指定存放数据的目录;
--logpath:用于指定日志文件;
--bind_ip:指定监听的ip地址,0.0.0.0表示监听本机所有可用地址;
--port:用于指定监听的端口,mongodb默认是监听27017;
--logappend:指定日志以追加的方式写入日志文件
--fork:指定运行为后台;
--shutdown:指定关闭mongodb;
提供配置文件方式启动
[mongod@node02 ~]$ cat /etc/mongod.confdbpath=/var/lib/mongo/logpath=/var/log/mongodb/mongod.loglogappend=1port=27017bind_ip=0.0.0.0fork=1
使用配置文件启动mongodb
[mongod@node02 ~]$ mongod -f /etc/mongod.conf about to fork child process, waiting until server is ready for connections.forked process: 2050child process started successfully, parent exiting[mongod@node02 ~]$ ss -tnlState Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 *:27017 *:* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::* [mongod@node02 ~]$
使用配置文件关闭mongodb
[mongod@node02 ~]$ mongod -f /etc/mongod.conf --shutdownkilling process with pid: 2050[mongod@node02 ~]$ ss -tnlState Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::* [mongod@node02 ~]$
以yaml格式提供配置文件,然后使用其配置文件启动mongodb
[mongod@node02 ~]$ cat /etc/mongod.confsystemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.logstorage: dbPath: /var/lib/mongo journal: enabled: trueprocessManagement: fork: truenet: port: 27017 bindIp: 0.0.0.0[mongod@node02 ~]$ ss -tnlState Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::* [mongod@node02 ~]$ mongod -f /etc/mongod.conf about to fork child process, waiting until server is ready for connections.forked process: 2166child process started successfully, parent exiting[mongod@node02 ~]$ ss -tnlState Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 *:27017 *:* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::* [mongod@node02 ~]$
到此,mongodb的安装配置启动就完成了;
三、MongoDB基础使用
使用mongo工具连接mongodb
[root@node02 ~]# mongo --host node01MongoDB shell version v4.4.1connecting to: mongodb://node01:27017/?compressors=disabled&gssapiServiceName=mongodbImplicit session: session { "id" : UUID("ecf71c30-5113-4492-bcae-46f2d781ae59") }MongoDB server version: 4.4.1---The server generated these startup warnings when booting: 2020-11-07T20:18:51.467+08:00: ***** SERVER RESTARTED ***** 2020-11-07T20:18:52.481+08:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted 2020-11-07T20:18:52.481+08:00: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never' 2020-11-07T20:18:52.481+08:00: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. We suggest setting it to 'never'------ Enable MongoDB's free cloud-based monitoring service, which will then receive and display metrics about your deployment (disk utilization, CPU, operation statistics, etc). The monitoring data will be available on a MongoDB website with a unique URL accessible to you and anyone you share the URL with. MongoDB may use this information to make product improvements and to suggest MongoDB products and deployment options to you. To enable free monitoring, run the following command: db.enableFreeMonitoring() To permanently disable this reminder, run the following command: db.disableFreeMonitoring()--->
查看帮助
> help db.help() help on db methods db.mycoll.help() help on collection methods sh.help() sharding helpers rs.help() replica set helpers help admin administrative help help connect connecting to a db help help keys key shortcuts help misc misc things to know help mr mapreduce show dbs show database names show collections show collections in current database show users show users in current database show profile show most recent system.profile entries with time >= 1ms show logs show the accessible logger names show log [name] prints out the last segment of log in memory, 'global' is default use <db_name> set current database db.mycoll.find() list objects in collection mycoll db.mycoll.find( { a : 1 } ) list objects in mycoll where a == 1 it result of the last line evaluated; use to further iterate DBQuery.shellBatchSize = x set default number of i.........
版权声明
本文为[程序猿欧文]所创,转载请带上原文链接,感谢
https://my.oschina.net/mikeowen/blog/4708035
边栏推荐
- From a friend recently Ali, Tencent, meituan and other P7 Python development post interview questions
- Installing MacOS 11 Big Sur in virtual machine
- 最全!阿里巴巴经济体云原生实践!(附网盘链接)
- 漫画|讲解一下如何写简历&项目
- BCCOIN告诉您:年底最靠谱的投资项目是什么!
- TiDB 性能竞赛 11.02-11.06
- YGC troubleshooting, let me rise again!
- Research on WLAN direct connection (peer-to-peer connection or P2P) and cross platform research of IOS
- Win10 terminal + WSL 2 installation and configuration guide, exquisite development experience
- “1024”征文活动结果新鲜出炉!快来看看是否榜上有名?~~
猜你喜欢
解决Safari浏览器下载文件文件名称乱码的问题
If you don't understand the gap with others, you will never become an architect! What's the difference between a monthly salary of 15K and a monthly salary of 65K?
VC + + specified directory file output by time
【计算机网络】学习笔记,第三篇:数据链路层(谢希仁版)
Adobe media encoder / me 2021 software installation package (with installation tutorial)
第二次作业
吐血整理!阿里巴巴 Android 开发手册!(附网盘链接)
Flink的sink实战之一:初探
笔试面试题目:求缺失的最小正整数
python基本语法 变量
随机推荐
Bccoin tells you: what is the most reliable investment project at the end of the year!
Win10 Terminal + WSL 2 安装配置指南,精致开发体验
C语言I博客作业03
PX4添加新的应用
解析Istio访问控制
Analysis of istio access control
Tiktok live monitoring Api: random recommendation
print( 'Hello,NumPy!' )
个人目前技术栈
Bohai bank million level fines continue: Li Volta said that the governance is perfect, the growth rate is declining
The most complete! Alibaba economy cloud original practice! (Internet disk link attached)
When kubernetes encounters confidential computing, see how Alibaba protects the data in the container! (Internet disk link attached)
Deeplight Technology Bluetooth protocol SRRC certification services
[computer network] learning notes, Part 3: data link layer (Xie Xiren version)
IQKeyboardManager 源代码看看
Rust : 性能测试criterion库
How does spotify drive data-driven decision making?
Istio流量管理--Ingress Gateway
Where is the new target market? What is the anchored product? |Ten questions 2021 Chinese enterprise service
第二次作业