使用mongodb数据库实例

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 Tair(兼容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
目录
相关文章
|
21天前
|
存储 监控 安全
数据库多实例的部署与配置方法
【10月更文挑战第23天】数据库多实例的部署和配置需要综合考虑多个因素,包括硬件资源、软件设置、性能优化、安全保障等。通过合理的部署和配置,可以充分发挥多实例的优势,提高数据库系统的运行效率和可靠性。在实际操作中,要不断总结经验,根据实际情况进行调整和优化,以适应不断变化的业务需求。
|
21天前
|
负载均衡 网络协议 数据库
选择适合自己的数据库多实例负载均衡技术
【10月更文挑战第23天】选择适合自己的数据库多实例负载均衡技术需要全面考虑多种因素。通过深入的分析和评估,结合自身的实际情况,能够做出明智的决策,为数据库系统的高效运行提供有力保障。
106 61
|
21天前
|
存储 负载均衡 监控
数据库多实例的深入解析
【10月更文挑战第24天】数据库多实例是一种重要的数据库架构方式,它为数据库的高效运行和灵活管理提供了多种优势。在实际应用中,需要根据具体的业务需求和技术环境,合理选择和配置多实例,以充分发挥其优势,提高数据库系统的性能和可靠性。随着技术的不断发展和进步,数据库多实例技术也将不断完善和创新,为数据库管理带来更多的可能性和便利。
90 57
|
22天前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第21天】本文探讨了MongoDB Atlas的核心特性、实践应用及对云原生数据库未来的思考。MongoDB Atlas作为MongoDB的云原生版本,提供全球分布式、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了云原生数据库的未来趋势,如架构灵活性、智能化运维和混合云支持,并分享了实施MongoDB Atlas的最佳实践。
|
23天前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第20天】本文探讨了MongoDB Atlas的核心特性、实践应用及对未来云原生数据库的思考。MongoDB Atlas作为云原生数据库服务,具备全球分布、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了实施MongoDB Atlas的最佳实践和职业心得,展望了云原生数据库的发展趋势。
|
21天前
|
缓存 负载均衡 监控
数据库多实例的负载均衡技术深入
【10月更文挑战第23天】数据库多实例负载均衡技术是确保数据库系统高效运行的重要手段。通过合理选择负载均衡策略、实时监控实例状态、不断优化调整,能够实现资源的最优分配和系统性能的提升。在实际应用中,需要根据具体情况灵活运用各种负载均衡技术,并结合其他相关技术,以满足不断变化的业务需求。
|
25天前
|
存储 NoSQL MongoDB
MongoDB 数据库引用
10月更文挑战第20天
15 1
|
10天前
|
关系型数据库 MySQL 数据库
【赵渝强老师】启动与关闭MySQL数据库实例
MySQL数据库安装完成后,可以通过命令脚本启动、查看状态、配置开机自启、查看自启列表及关闭数据库。本文提供了详细的操作步骤和示例代码,并附有视频讲解。
|
30天前
|
存储 NoSQL MongoDB
mongodb的数据库表怎么创建
在此过程中,理解并掌握这些基本操作,是深入探索MongoDB魅力,乃至构建高效数据解决方案的关键所在。通过实践,您将更加深刻地体会到这种随需应变的数据管理模式带来的便利与效率提升。
24 0
|
JSON NoSQL Java
mongoDB导出数据库所有集合内容到json文件
网上搜了一圈,官方并有提供批量导出所有集合到json文件的方法。有不少脚本可以实现,但是我还是习惯用java,如下 package starcLL.
2214 0