Mongo结合Spring、监控性能数据、Redis持久化

本文介绍了MongoDB的创建删除数据库、集合操作、文档插入与查询,以及如何利用MongoDB存储性能监控数据。同时,讲解了Redis的RDB和AOF两种持久化机制,分析了各自的优缺点。
摘要由CSDN通过智能技术生成

MongoDB简介

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

MongoDB创建删除数据库

MongoDB使用 use DATABASE_NAME 命令来创建数据库。如果指定的数据库DATABASE_NAME不存在,则该命令将创建一个新的数据库,否则返回现有的数据库。

创建

use 命令

MongoDB使用 use DATABASE_NAME 命令来创建数据库。如果指定的数据库DATABASE_NAME不存在,则该命令将创建一个新的数据库,否则返回现有的数据库。

语法

use DATABASE 语句的基本语法如下 -

use DATABASE_NAME

示例

如果要创建一个名称为<newdb>的数据库,那么使用 use DATABASE 语句将如下所示:

> use newdb
switched to db newdb

要检查当前选择的数据库,请使用 db 命令 -

>db
newdb

如果要检查数据库列表,请使用命令:show dbs

>show dbs
local     0.000025GB
test      0.00002GB

创建的数据库(newdb)不在列表中。要显示数据库,需要至少插入一个文档,空的数据库是不显示出来的。

>db.items.insert({
   "name":"yiibai tutorials"})
>show dbs
local     0.00005GB
test      0.00002GB
newdb      0.00002GB

在 MongoDB 中默认数据库是:test。 如果您还没有创建过任何数据库,则集合/文档将存储在test数据库中。

删除

db.dropDatabase() 方法

MongoDB中的 db.dropDatabase()命令用于删除现有的数据库。

db.dropDatabase()

这将删除当前所选数据库。 如果没有选择任何数据库,那么它将删除默认的’test‘数据库。

示例

首先,使用命令show dbs检查可用数据库的列表。

>show dbs
local      0.00025GB
newdb       0.0002GB
test       0.00012GB

如果要删除新数据库<newdb>,那么dropDatabase()命令将如下所示:

>use newdb
switched to db newdb
>db.dropDatabase()
>{
    "dropped" : "newdb", "ok" : 1 }

现在检查数据库列表,如下 -

>show dbs
local      0.00025GB
test       0.0002GB

创建集合

createCollection()方法

MongoDB 的 db.createCollection(name,options) 方法用于在MongoDB 中创建集合。

语法

createCollection()命令的基本语法如下 -

db.createCollection(name, options)

在命令中,name 是要创建的集合的名称。 options是一个文档,用于指定集合的配置。

参数 类型 描述
name String 要创建的集合的名称
options Document (可选)指定有关内存大小和索引的选项

options参数是可选的,因此只需要指定集合的名称。 以下是可以使用的选项列表:

字段 类型 描述
capped Boolean (可选)如果为true,则启用封闭的集合。上限集合是固定大小的集合,它在达到其最大大小时自动覆盖其最旧的条目。 如果指定true,则还需要指定size参数。
autoIndexId Boolean (可选)如果为true,则在_id字段上自动创建索引。默认值为false
size 数字 (可选)指定上限集合的最大大小(以字节为单位)。 如果cappedtrue,那么还需要指定此字段的值。
max 数字 (可选)指定上限集合中允许的最大文档数。

在插入文档时,MongoDB首先检查上限集合capped字段的大小,然后检查max字段。

例子

没有使用选项的createCollection()方法的基本语法如下 -

>use test
switched to db test
>db.createCollection("mycollection")
{
    "ok" : 1 }

可以使用命令show collections检查创建的集合。

>show collections
mycollection

以下示例显示了createCollection()方法的语法,其中几个重要选项 -

> db.createCollection("mycol", {
   capped : true, autoIndexId : true, size : 6142800, max : 10000 })
{
    "ok" : 1 }

在 MongoDB 中,不需要创建集合。当插入一些文档时,MongoDB 会自动创建集合。

>db.newcollection.insert({
   "name" : "yiibaitutorials"})
>show collections
mycol
newcollection
mycollection

删除集合

drop()方法

MongoDB 的 db.collection.drop() 用于从数据库中删除集合。

语法

drop()命令的基本语法如下 -

db.COLLECTION_NAME.drop()

示例

首先,检查数据库 test 中可用的集合。

>use test
switched to db test
> show collections
mycol
mycollection
newcollection

现在删除名称为 mycollection 的集合。

>db.mycollection.drop()
true

再次检查当前数据库的集合列表,如下 -

> show collections
mycol
newcollection

如果选定的集合成功删除,drop()方法将返回true,否则返回false

插入文档

insert()方法

要将数据插入到 MongoDB 集合中,需要使用 MongoDB 的 insert()save()方法。

语法

insert()命令的基本语法如下:

>db.COLLECTION_NAME.insert(document)

示例

>db.mycol.insert({
   
   _id: 100,
   title: 'MongoDB Overview', 
   description: 'MongoDB is no sql database',
   by: 'yiibai tutorials',
   url: 'http://www.yiibai.com',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 100,
})

这里mycol是集合的名称,在前一章中所创建的。如果数据库中不存在集合,则MongoDB将创建此集合,然后将文档插入到该集合中。

在插入的文档中,如果不指定_id参数,那么 MongoDB 会为此文档分配一个唯一的ObjectId。

_id为集合中的每个文档唯一的12个字节的十六进制数。 12字节划分如下 -

_id: ObjectId(4 bytes timestamp, 3 bytes machine id, 2 bytes process id, 3 bytes incrementer)

要在单个查询中插入多个文档,可以在insert()命令中传递文档数组。如下所示 -

> db.mycol.insert([
   {
   
      _id: 101,
      title: 'MongoDB Guide', 
      description: 'MongoDB is no sql database',
      by: 'yiibai tutorials',
      url: 'http://www.yiibai.com',
      tags: ['mongodb', 'database', 'NoSQL'],
      likes: 100
   },

   {
   
      _id: 102,
      title: 'NoSQL Database', 
      description: "NoSQL database doesn't have tables",
      by: 'yiibai tutorials',
      url: 'http://www.yiibai.com',
      tags: ['mongodb', 'database', 'NoSQL'],
      likes: 210, 
      comments: [
         {
   
            user:'user1',
            message: 'My first comment',
            dateCreated: new Date(2017,11,10,2,35),
            like: 0 
         }
      ]
   },
   {
   
      _id: 104,
      title: 'Python Quick Guide', 
      description: "Python Quick start ",
      by: 'yiibai tutorials',
      url: 'http://www.yiibai.com',
      tags: ['Python', 'database', 'NoSQL'],
      likes: 30, 
      comments: [
         {
   
            user:'user1',
            message: 'My first comment',
            dateCreated: new Date(2018,11,10,2,35),
            like: 590 
         }
      ]
   }
])

要插入文档,也可以使用db.post.save(document)。 如果不在文档中指定_id,那么save()方法将与insert()方法一样自动分配ID的值。如果指定_id,则将以save()方法的形式替换包含_id的文档的全部数据。

其它插入文档的方法

db.collection.insertOne()方法

db.collection.insertOne()方法将单个文档插入到集合中。以下示例将新文档插入到库存集合中。 如果文档没有指定_id字段,MongoDB会自动将_id字段与ObjectId值添加到新文档。

db.inventory.insertOne(
   {
    item: "canvas", qty: 100, tags: ["cotton"], size: {
    h: 28, w: 35.5, uom: "cm" } }
)

db.collection.insertOne()方法返回包含新插入的文档的`_id```字段值的文档。

执行结果如下 -

> db.inventory.insertOne(
...    {
    item: "canvas", qty: 100, tags: ["cotton"], size: {
    h: 28, w: 35.5, uom: "cm" } }
... )
{
   
        "acknowledged" : true,
        "insertedId" : ObjectId("5955220846be576f199feb55")
}

db.collection.insertMany()方法

db.collection.insertMany()方法将多个文档插入到集合中,可将一系列文档传递给db.collection.insertMany()方法。以下示例将三个新文档插入到库存集合中。如果文档没有指定_id字段,MongoDB会向每个文档添加一个ObjectId值的_id字段。

db.inventory.insertMany([
   {
    item: "journal", qty: 25, tags: ["blank", "red"], size: {
    h: 14, w: 21, uom: "cm" } },
   {
    item: "mat", qty: 85, tags: ["gray"], size: {
    h: 27.9, w: 35.5, uom: "cm" } },
   {
    item: "mousepad", qty: 25, tags: ["gel", "blue"], size: {
    h: 19, w: 22.85, uom: "cm" } }
])

insertMany()返回包含新插入的文档_id字段值的文档。执行结果如下 -

> db.inventory.insertMany([
...    {
    item: "journal", qty: 25, tags: ["blank", "red"], size: {
    h: 14, w: 21, uom: "cm" } },
...    {
    item: "mat", qty: 85, tags: ["gray"], size: {
    h: 27.9, w: 35.5, uom: "cm" } },
...    {
    item: "mousepad", qty: 25, tags: ["gel", "blue"], size: {
    h: 19, w: 22.85, uom: "cm" } }
... ])
{
   
        "acknowledged" : true,
        "insertedIds" : [
                ObjectId("59552c1c46be576f199feb56"),
                ObjectId("59552c1c46be576f199feb57"),
                ObjectId("59552c1c46be576f199feb58")
        ]
}

查询文档

find()方法

要从MongoDB集合查询数据,需要使用MongoDB的find()方法。

语法

find()命令的基本语法如下:

>db.COLLECTION_NAME.find(document)

find()方法将以非结构化的方式显示所有文档。

pretty()方法

要以格式化的方式显示结果,可以使用pretty()方法。

语法

> db.mycol.find().pretty()

示例

>db.mycol.find().pretty()
{
   
   "_id": 100,
   "title": "MongoDB Overview", 
   "description": "MongoDB is no sql database",
   "by": "yiibai tutorials",
   "url": "http://www.yiibai.com",
   "tags": ["mongodb", "database", "NoSQL"],
   "likes": "100"
}

除了find()方法外,还有一个findOne()方法,它只返回一个文档。

MongoDB 与 RDBMS的等效 Where 子句

要在一些条件的基础上查询文档,可以使用以下操作。

操作 语法 示例 RDBMS等效语句
相等 {<key>:<value>} db.mycol.find({"by":"yiibai"}).pretty() where by = 'yiibai'
小于 {<key>:{$lt:<value>}} db.mycol.find({"likes":{$lt:50}}).pretty() where likes &
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 Docker Compose 部署 Kafka、Elasticsearch、Redis、MySQL 和 MongoDB,并实现持久化。以下是一个示例的 Docker Compose 配置文件: ```yaml version: '3' services: zookeeper: image: confluentinc/cp-zookeeper:6.2.0 container_name: zookeeper ports: - 2181:2181 volumes: - zookeeper-data:/var/lib/zookeeper/data - zookeeper-logs:/var/lib/zookeeper/logs kafka: image: confluentinc/cp-kafka:6.2.0 container_name: kafka depends_on: - zookeeper ports: - 9092:9092 environment: - KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 - KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 volumes: - kafka-data:/var/lib/kafka/data elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.14.0 container_name: elasticsearch ports: - 9200:9200 volumes: - esdata:/usr/share/elasticsearch/data environment: - discovery.type=single-node redis: image: redis:6.2.5 container_name: redis ports: - 6379:6379 volumes: - redis-data:/data mysql: image: mysql:8.0.26 container_name: mysql ports: - 3306:3306 volumes: - mysql-data:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=your_root_password mongo: image: mongo:5.0.2 container_name: mongo ports: - 27017:27017 volumes: - mongo-data:/data/db volumes: zookeeper-data: driver: local zookeeper-logs: driver: local kafka-data: driver: local esdata: driver: local redis-data: driver: local mysql-data: driver: local mongo-data: driver: local ``` 这个示例配置文件中包含了 ZooKeeper、Kafka、Elasticsearch、Redis、MySQL 和 MongoDB 的部署配置。通过挂载相应的卷,实现了持久化。 使用以下命令启动所有的服务: ```shell docker-compose up -d ``` 这将启动所有的容器,并将它们分别绑定到主机的相应端口。你可以根据需要修改端口映射。 请注意,这只是一个简单的示例配置文件,你可以根据自己的需求进行修改和扩展。同时,还可以根据需要配置其他 Kafka、Elasticsearch、Redis、MySQL 和 MongoDB 相关的环境变量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值