jinhailang / blog

技术博客:知其然,知其所以然
https://github.com/jinhailang/blog/issues
60 stars 6 forks source link

MongoDB 学习笔记 #3

Open jinhailang opened 7 years ago

jinhailang commented 7 years ago

概述

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应
用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能
最丰富,最像关系数据库的。

NoSQL

NoSQL一词最早出现于1998年,是Carlo Strozzi开发的一个轻量、开源、不提供
SQL功能的关系数据库。
2009年,Last.fm的Johan Oskarsson发起了一次关于分布式开源数据库的讨论
[2],来自Rackspace的Eric Evans再次提出了NoSQL的概念,这时的NoSQL主要指
非关系型、分布式、不提供ACID的数据库设计模式。

NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不
同于传统的关系型数据库的数据库管理系统的统称。
NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿
比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
RDBMS vs NoSQL
CAP定理(CAP theorem)

在计算机科学中, CAP定理(CAP theorem), 又被称作 布鲁尔定理(Brewer's theorem), 它指出对于一个分布式计算系统来说,不可能同时满足以下三点:

组件

MongoDB 提供了简单的 HTTP 用户界面。 如果你想启用该功能,需要在启动的时候指定参数 --rest

./mongod --dbpath=/data/db --rest

MongoDB 的 Web 界面访问端口比服务的端口多1000。默认:http://localhost:28017

使用

数据操作

复制(副本集)

MongoDB复制是将数据同步在多个服务器的过程。 复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性。 主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。MongoDB的副本集与我们常见的主从有所不同,主从在主机宕机后所有服务将停止,而副本集在主机宕机后,副本会接管主节点成为主节点,不会出现宕机的情况。

MongoDB复制结构图如下所示:

启动主节点:
mongod --port 27017 --dbpath "./data" --replSet rs0

在客户端操作
启动副本集:
> rs.initiate()

副本集添加成员:
> rs.add(HOST_NAME:PORT)
分片

在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求。 当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。

MongoDB中使用分片集群结构分布:

操作步骤:

    1)mkdir -p /data/shard/log && mkdir -p /data/shard/s0 && mkdir -p /data/shard/s1 ...

    2)./mongod --port 27020 --dbpath=/data/shard/s0 --logpath=/data/shard/log/s0.log --logappend --fork
    ...
    ./mongod --port 27023 --dbpath=/data/shard/s1 --logpath=/data/shard/log/s1.log --logappend --fork

    3)./mongod --port 27100

    4)./mongos --port 40000 --configdb localhost:27100 --fork --logpath=/data/shard/log/route.log --chunkSize 500
        * chunk的大小的,单位是MB,默认大小为200MB.

    5)使用MongoDB Shell登录到mongos,添加Shard节点
        ./mongo admin --port 40000
        > db.runCommand({ addshard:"localhost:27020" })
        > db.runCommand({ enablesharding:"test" }) #设置分片存储的数据库
    6)直接按照连接普通的mongo数据库那样,将数据库连接接入接口 40000
备份与恢复

在Mongodb中我们使用mongodump命令来备份MongoDB数据。该命令可以导出所有数据到指定目录中。 mongodump命令可以通过参数指定导出的数据量级转存的服务器。

备份:
> mongodump -h dbhost -d dbname -o dbdirectory

示例:> mongodump -h 127.0.0.1:27017 -d test -o /data/dump

恢复:
> mongorestore -h <hostname><:port> -d dbname <path>

管理工具

RockMongo是PHP5写的一个MongoDB管理工具。 通过 Rockmongo 你可以管理 MongoDB服务,数据库,集合,文档,索引等等。 它提供了非常人性化的操作。类似 phpMyAdmin(PHP开发的MySql管理工具)

Rockmongo 下载地址:http://rockmongo.com/downloads

参考