使用mongodb数据库实例

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 【5月更文挑战第9天】MongoDB中的集合类似关系数据库的表,但不强制模式,允许嵌入式文档以实现更灵活的数据布局。安装MongoDB在Ubuntu上涉及添加源列表和更新,CentOS则需创建配置文件。MongoDB支持备份和恢复,以及全文搜索。其灵活模式和动态模式减少了开发中的复杂性,但并非无模式,大部分数据仍具结构化特点。

1 前言

mongodb中一个 表就是 collections 集合

集合不强制执行任何模式,完全有可能使用单个集合与json文件混杂 构建一个系统,但这将是一个非常糟糕的主意。大多数 MongoDB 系统的布局有点类似于你会在关系系统中找到什么。

尽管集合collections较少。换句话说,如果它是关系数据库中的表数据库,它有可能是 MongoDB中的一个集合(多对多连接表是一个重要的例外,因为多对多仅用于启用与简单实体的一对多关系的表)

当您考虑嵌入文档时,对话会变得更加有趣。比如一个博客。

你应该有一个帖子集合和一个评论集合,还是每个帖子都有一个数组嵌入其中的评论?

暂时允许 16MB 的文件大小限制(所有的都小于超过200KB,那么您的博客有多受欢迎?),

大多数开发人员应该更愿意将内容分开。为了更干净,为您提供更好的性能和更明确的内容。

MongoDB 灵活的模式允许您将两者结合起来,通过将评论保留在自己的集合中但在其中嵌入一些评论(可能是前几条)的方法。

博客帖子,以便能够在帖子中显示它们。这遵循将您想要的数据保存在一起的原则。
返回一个查询。没有硬性规定(除了 16MB)。尝试不同的方法。 将有不同的发现。

面向文档系统中的建模与关系世界中的建模有所不同,但也没有太大不同。在mongodb中你有更多的灵活性和一个约束。

1 安装

检查公钥

sudo apt-key list

创建安装列表

    echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list

加载本地安装工具的配置

    sudo apt-get update

linux centos install mongo

2 mongo 主从配置

主启动 mongod --config /etc/mongodb.conf --master

副启动 # mongod --config /etc/mongodb.conf --slave --autoresync --slavedelay=10 --source master-ip:master-port

3 引擎对比:mongoengine & pymongo

存入操作:save 参数解释

   :param force_insert: 只新增数据,不去更新mongo中已有的数据

    :param validate: 默认验证数据 文件合法性 False为不验证; set to ``False`` to skip.

    :param clean: 调用文档清理方法。 call the document clean method, requires `validate` to be True.

    :param write_concern: 传递额外关键字参数给 pymongo 将作为结果选项 # Extra keyword arguments are passed down to

        :meth:`~pymongo.collection.Collection.save` OR
        :meth:`~pymongo.collection.Collection.insert`
        which will be used as options for the resultant
        ``getLastError`` command.  For example,
        ``save(..., write_concern={w: 2, fsync: True}, ...)`` will
        wait until at least two servers have recorded the write and
        will force an fsync on the primary server.
    :param cascade: 设置级联保存的标志。你可以设置一个
        默认通过设置“级联” Sets the flag for cascading saves.  You can set a
        default by setting "cascade" in the document __meta__

    :param cascade_kwargs: 要传递的 kwargs 字典 throw
        级联保存。 (optional) kwargs dictionary to be passed throw
        to cascading saves.  Implies ``cascade=True``.

    :param _refs: 级联保存中使用的已处理引用列表 A list of processed references used in cascading saves

    :param save_condition: 仅在匹配数据库中的记录时才执行保存
        满足条件 only perform save if matching record in db
        satisfies condition(s) (e.g. version number).
        Raises :class:`OperationError` if the conditions are not satisfied

    :param signal_kwargs: 要传递给的 kwargs 字典
        信号呼叫 (optional) kwargs dictionary to be passed to
        the signal calls.

4 性能工具

索引 indexes

创建索引

            // where "name" is the field name
            db.unicorns.ensureIndex({name: 1});

删除索引

            db.unicorns.dropIndex({name: 1});

唯一索引 unique index

    db.unicorns.ensureIndex({name: 1}, {unique: true});

在嵌入式 数据中 创建索引

    db.unicorns.ensureIndex({name: 1, vampires: -1});

查看查询是否使用索引

 db.unicorns.find().explain()

 db.unicorns.find({name: 'Pilot'}).explain()

5 备份/恢复

mongodump/mongorestore

配置主从 之后,数据将 异步的 复制到每个节点。
如果主 数据库 掉线,其中一个 备数据库将 立即成为主数据库。

分片 shrding
mongodb 支持自动分片。 分片可 跨多个服务器 和 客户端访问数据
分片是mangodb 客机 缩放的主要方式。

主从集群 是mongodb达到规模应用的主要方式。

6 触发器

创建触发器

    db.setProfilingLevel(2);

使用

db.unicorns.find({weight: {$gt: 600}});

另一个方式

db.system.profile.find()

//profile anything that takes
//more than 1 second
db.setProfilingLevel(1, 1000);

7 备份 与 恢复 数据

备份

mongodump --db learn --out backup

回滚数据

mongorestore --db learn --collection unicorns backup/learn/unicorns.bson

导入数据 支持json 或 csv格式

mongoexport --db learn --collection unicorns

导出数据

mongoexport --db learn --collection unicorns --csv --fields name,weight,vampires

8 启动和指令使用

启动

  sudo systemctl start mongod

重启

 sudo systemctl reload mongod

停止

  sudo systemctl stop mongod

日志

 sudo tail /var/log/mongodb/mongod.log

检查是否启动

 systemctl is-enabled mongod; echo $?

如果是disable,执行命令启动

   sudo systemctl enable mongod

退出

  exit

9 全文 索引

支持数组 arrays 和全文 full text search

  • 事务
    $inc and $set

    注意该操作 原子性不安全。

  • 复杂聚合查询

aggregation 聚合框架 pipeline管道
MapReduce 可解决 集合 和 管道问题。
首先 映射 map, 然后压缩 reduce
超大数据的并行处理,请使用 Hadoop
mongodb 有相关的 插件提供 连接到 Hadoop

  • 实现一个类似SQL的 count()

     db.unicorns.aggregate([{$group:{_id:'$gender',total: {$sum:1}}}])
    

在 shell 中,我们有一个聚合助手,它接受一组管道运算符。

对于一个简单的计数分组通过某种方式,我们只需要一个这样的运算符。

 $group.

10 小结

有许多足够新和竞争的存储技术,很容易被所有选择所淹没。
不再需要是依赖处理数据的单一解决方案。 虽然单一方案优势明显,可以适用于大多方案。

不是你必须使用不同的技术,而是你可以使用不同的技术。只有您知道引入新解决方案的好处是否大于成本。

mongdb 也可以作为一种 通用的存储方案。 a general solution. 文件关系型数据库。

与关系数据库有很多共同之处。 我们可以简单地说一下 MongoDB 应该被视为直接替代关系数据库。

Redis 作为增强关系数据库作为持久的键值存储,MongoDB 是您数据的中央存储库。 mongodb不是关系数据库的替代品

架构灵活性 Flexible Schema,面向文档的数据库的一个经常被吹捧的好处是它们不强制执行固定模式。

这让他们比传统的数据库表更灵活。我同意灵活的模式是一个很好的特性,但不是主要的。

无模式schema-less,就好像你将突然开始存储疯狂的 各种数据。
而关系型数据库中使用模型时,域和数据集真的让人很痛苦。

无模式是很酷,但你的大部分数据都将是高度结构化的。因为偶尔不匹配将让人感觉很方便。

当我们引入一个新的功能时,一个可能是空的列 根本不会引起任何问题,mongodb自动处理它。

动态模式的真正好处,较少的设置和 减少与 OOP 的摩擦。动态及其流行的成熟度, 实现已经减少了很多对象关系阻抗 和 不匹配。

从驱动开发者的角度考虑,你只需要把数据 转换为json(mongodb中的BSON),就可以存储。没有关系数据中的属性映射或类型映射。 这是可以提升效率的。

下一节,我们举例指令和使用第三方库。

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
5天前
|
存储 JSON NoSQL
【文档数据库】ES和MongoDB的对比
【文档数据库】ES和MongoDB的对比
10 1
|
10天前
|
NoSQL JavaScript 安全
精心操作MongoDB:删除数据库的关键步骤和重要事项
精心操作MongoDB:删除数据库的关键步骤和重要事项
|
10天前
|
NoSQL 测试技术 MongoDB
MongoDB数据库管理:全面掌握mongodump和mongorestore的备份与恢复技巧
MongoDB数据库管理:全面掌握mongodump和mongorestore的备份与恢复技巧
|
10天前
|
存储 NoSQL 数据处理
探索MongoDB:灵活、高性能的NoSQL数据库解决方案与应用实践
探索MongoDB:灵活、高性能的NoSQL数据库解决方案与应用实践
|
11天前
|
关系型数据库 MySQL 数据库
MySQL数据库——多表查询(4)-实例练习、多表查询总结
MySQL数据库——多表查询(4)-实例练习、多表查询总结
16 1
|
12天前
|
存储 缓存 NoSQL
MongoDB数据库的主要应用场景是什么?
【6月更文挑战第5天】MongoDB数据库的主要应用场景是什么?
51 1
|
12天前
|
存储 NoSQL MongoDB
MongoDB数据库
【6月更文挑战第5天】MongoDB数据库
39 1
|
13天前
|
SQL 关系型数据库 数据库
17. Python 数据库操作之MySQL和SQLite实例
17. Python 数据库操作之MySQL和SQLite实例
46 2
|
1月前
|
存储 SQL NoSQL
什么是 MongoDB,为什么它是当今最受欢迎的数据库之一?
什么是 MongoDB,为什么它是当今最受欢迎的数据库之一?
|
1月前
|
JSON NoSQL MongoDB
理解Nosql数据库的mongodb
【5月更文挑战第5天】MongoDB是2009年发布的一款通用型NoSQL数据库,结合了关系模型和NoSQL的优点,适用于各种现代应用。其特点包括图形界面、数据服务、云基础设施集成(AWS, Azure, Google Cloud)。它具备全面的查询能力、ACID事务、可调整的一致性保证,并有多语言驱动及工具,可在任何地方运行。
209 4