自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

MongoDB從入門到精通、Springboot整合MongoDB

數(shù)據(jù)庫 MongoDB
MongoDB的主要特點是它采用了文檔型數(shù)據(jù)存儲模型,允許開發(fā)人員以非常自然的方式組織和存儲數(shù)據(jù)。當(dāng)一些表在MySQL查詢效率不高時,可以轉(zhuǎn)為MongoDB,解決數(shù)據(jù)多查詢慢的情況!下面我們在詳細的了解一下吧!

一、前言

MongoDB是一款比較常見的NoSQL數(shù)據(jù)庫,它以其靈活性、可伸縮性和高性能而聞名。

MongoDB的主要特點是它采用了文檔型數(shù)據(jù)存儲模型,允許開發(fā)人員以非常自然的方式組織和存儲數(shù)據(jù)。

當(dāng)一些表在MySQL查詢效率不高時,可以轉(zhuǎn)為MongoDB,解決數(shù)據(jù)多查詢慢的情況!

下面我們在詳細的了解一下吧!

二、非關(guān)系數(shù)據(jù)庫

說到MongoDB,就順便說一下非關(guān)系數(shù)據(jù)庫的常見的幾種:

類型

名稱

介紹

文檔數(shù)據(jù)庫

MongoDB

使用BSON(二進制JSON)格式存儲數(shù)據(jù),適用于半結(jié)構(gòu)化數(shù)據(jù)和復(fù)雜查詢。

鍵值數(shù)據(jù)庫

Redis

用于緩存和快速數(shù)據(jù)訪問,支持復(fù)雜的數(shù)據(jù)結(jié)構(gòu),如字符串、列表、哈希等。

列式數(shù)據(jù)庫

ClickHouse

一個開源的列式數(shù)據(jù)庫管理系統(tǒng),專門設(shè)計用于高性能的數(shù)據(jù)分析和OLAP(聯(lián)機分析處理)工作負載。

圖數(shù)據(jù)庫

Neo4j

用于存儲和查詢圖形數(shù)據(jù),如社交網(wǎng)絡(luò)關(guān)系、知識圖譜等。

搜索引擎

Elasticsearch

分布式搜索和分析引擎,適用于全文搜索、日志分析和實時數(shù)據(jù)分析。

三、MongoDB介紹

MongoDB是一個開源的文檔型數(shù)據(jù)庫管理系統(tǒng),它屬于非關(guān)系型數(shù)據(jù)庫的一種,主要存儲半結(jié)構(gòu)化或無結(jié)構(gòu)化數(shù)據(jù),并提供靈活的數(shù)據(jù)建模和查詢能力。

MongoDB中的一條記錄就是一個文檔,它是由字段和值對組成的數(shù)據(jù)結(jié)構(gòu)。MongoDB 文檔類似于 JSON 對象。字段的值可以包括其他文檔、數(shù)組和文檔數(shù)組。

使用文檔的優(yōu)點是:

  • 文檔對應(yīng)于許多編程語言中的本機數(shù)據(jù)類型。
  • 嵌入式文檔和數(shù)組減少了對昂貴連接的需求。
  • 動態(tài)模式支持流暢的多態(tài)性。

「我們來比對MySQL說一下MongoDB的概念:」

最大的概念數(shù)據(jù)庫其實可以理解為一樣的,「只不過MySQL數(shù)據(jù)庫里放的是表,MongoDB里放得是文檔集合?!?/p>

所以:表(Table)與文檔集合(Collection)可以理解類似的,存儲的形式不一樣

在細化的概念就是:行(Row):行是表中的記錄,它們包含特定的字段和值文檔(Document):文檔是JSON格式的數(shù)據(jù),它們包含了數(shù)據(jù)字段和相應(yīng)的值

四、特點

1、高性能

MongoDB 提供高性能的數(shù)據(jù)持久性。特別是下面兩個方面:

  • 對嵌入式數(shù)據(jù)模型的支持減少了數(shù)據(jù)庫系統(tǒng)上的 I/O 活動。
  • 索引支持更快的查詢,并且可以包含嵌入文檔和數(shù)組中的鍵。

2、查詢接口

MongoDB 查詢 API 支持讀寫操作 (CRUD)以及:

  • 復(fù)雜的數(shù)據(jù)聚合
  • 文本搜索和地理空間查詢

3、高可用性

MongoDB 的復(fù)制工具稱為副本集,它提供:

  • 自動故障轉(zhuǎn)移
  • 數(shù)據(jù)冗余

「副本集是一組維護相同數(shù)據(jù)集的 MongoDB 服務(wù)器,提供冗余并提高數(shù)據(jù)可用性。」

4、水平擴展性

MongoDB 提供水平可擴展性作為其核心 功能的一部分:

  • 分片將數(shù)據(jù)分布在機器集群上。
  • 從 3.4 開始,MongoDB 支持基于分片鍵創(chuàng)建數(shù)據(jù)區(qū)域。

「在平衡集群中,MongoDB 將區(qū)域覆蓋的讀寫操作僅定向到該區(qū)域內(nèi)的分片?!?/p>

5、支持多個存儲引擎

MongoDB 支持多種存儲引擎:

  • WiredTiger 存儲引擎(包括對 靜態(tài)加密的支持)。
  • 內(nèi)存存儲引擎。

「此外,MongoDB提供了可插拔的存儲引擎API,允許第三方為MongoDB開發(fā)存儲引擎?!?/p>

五、應(yīng)用場景

  • 日志和審計數(shù)據(jù):MongoDB可以使用MongoDB存儲應(yīng)用程序日志、審計數(shù)據(jù)、操作日志、錯誤日志等。
  • 產(chǎn)品和目錄信息:MongoDB適用于電子商務(wù)平臺,用于存儲產(chǎn)品信息、價格、庫存以及目錄結(jié)構(gòu)。
  • 時間序列數(shù)據(jù):MongoDB可用于存儲時間序列數(shù)據(jù),如傳感器讀數(shù)、市場行情、監(jiān)控數(shù)據(jù)和日志。
  • 實時事件數(shù)據(jù):實時事件數(shù)據(jù),如點擊流分析、用戶行為追蹤、社交媒體活動等,可以在MongoDB中存儲和分析。
  • 地理信息數(shù)據(jù):如果你需要存儲地理信息數(shù)據(jù),如位置坐標(biāo)、地圖數(shù)據(jù)或地理空間信息,MongoDB的地理空間功能非常有用。
  • 會話數(shù)據(jù):MongoDB可以用于存儲Web應(yīng)用程序的會話數(shù)據(jù),以實現(xiàn)用戶身份驗證和會話管理。
  • 用戶數(shù)據(jù):你可以使用MongoDB存儲用戶配置文件、個人信息、登錄憑據(jù)等用戶相關(guān)數(shù)據(jù)。
  • 大數(shù)據(jù)分析:MongoDB在大數(shù)據(jù)分析領(lǐng)域也有廣泛應(yīng)用,可以存儲和分析大規(guī)模數(shù)據(jù)集,支持實時分析和報告。
  • 博客和內(nèi)容管理:MongoDB適合存儲博客文章、評論、標(biāo)簽和多媒體內(nèi)容。

「當(dāng)然有些東西Redis也可以實現(xiàn),具體情況在根據(jù)公司情況進行選擇,不要死板哈!」

六、安裝與Navicat連接

1、安裝

本次使用Docker安裝比較省心,當(dāng)然也可以下載客戶端裝在Linux中,不太建議裝在Windows中。

不想裝虛擬機的話,裝也是可以的,就不帶大家安裝了,直接給地址自行下載哈:

mongodb下載地址:https://www.mongodb.com/try/download/community

目前最新版本:7.0.1

運行命令之前,需要在宿主機上創(chuàng)建文件夾用于掛載數(shù)據(jù),創(chuàng)建完文件夾記得給修改權(quán)限。

自己測試玩,可以不掛載,生產(chǎn)上也不太建議使用Docker安裝!

docker run -d  --name mongodb  --restart always -p 27017:27017 -v /data/mongo:/data/db mongo

2、測試連接

我們沒有設(shè)置密碼,大家也可以設(shè)置一下!

剛剛創(chuàng)建的是一個空的數(shù)據(jù)庫,需要我們自己創(chuàng)建一個數(shù)據(jù)庫:

創(chuàng)建完成:

對于數(shù)據(jù)庫API操作大家可以看文檔來走一遍,這里就不具體演示,我們還是以在Springboot程序中來使用演示為主:

MongoDB API文檔:https://www.mongodb.com/docs/manual/tutorial/insert-documents/

六、整合Springboot

1、導(dǎo)入依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

2、配置yml

server:
  port: 8086
spring:
  data:
    mongodb:
      host: 192.168.239.130
      port: 27017
      database: test

3、使用方式選擇

「這里說一下有個特殊點:」在 MongoDB 中,存儲在集合中的每個文檔都需要一個唯一的 _id字段作為主鍵。如果插入的文檔省略了該_id字段,MongoDB 驅(qū)動程序會自動為該字段生成一個_id,還會新增一個_class字段,來存在全類名。如果有個字段為id,也會轉(zhuǎn)化為_id!

這里分為兩種使用形式,一種是直接使用MongoTemplate,第二種就是extends MongoRepository<MyDocument, String>,來實現(xiàn)各種API。

這兩種方式?jīng)]有什么區(qū)別,不想寫一個接口來繼承的話,直接使用template也是沒問題的!

「制定了MongoRepository<CommonLog, String>就不需要每次操作的時候指定,像MongoTemplate就需要每次操作來指定是那個類。」

我們以第一種來使用,當(dāng)然第二種的使用也給大家參考:

public interface CommonLogRepository extends MongoRepository<CommonLog, String> {
}

4、CRUD操作

簡單的寫在Controller里了

「新增如果數(shù)據(jù)庫中不存在文檔就會自動新增并把記錄插入,還是很智能的!」

「新增:」

private final MongoTemplate mongoTemplate;

@PostMapping("saveCommonLog")
public CommonLog saveCommonLog() {
    CommonLog commonLog = new CommonLog();
    commonLog.setOperIp("127.0.0.1");
    commonLog.setBusinessType(1);
    commonLog.setOperUrl("https://baidu.com");
    commonLog.setOperName("我是新增");
    commonLog.setTitle("測試第一條記錄");
    commonLog.setRequestMethod("get");
    commonLog.setOperTime(new Date());
    return mongoTemplate.save(commonLog);
}

「查詢所有:」

@GetMapping("getAllCommonLogs")
public List<CommonLog> getAllCommonLogs() {
    return mongoTemplate.findAll(CommonLog.class);
}

「根據(jù)ID查詢:」

@GetMapping("getCommonLogById")
public CommonLog getCommonLogById(@RequestParam String id) {
    return mongoTemplate.findById(id, CommonLog.class);
}

「兩種更新操作:」

@PostMapping("/updateCommonLog")
public void updateCommonLog(){
 // 第一種
    CommonLog commonLog = mongoTemplate.findById("65151ce0112fec57886da00c", CommonLog.class);
    if (commonLog != null) {
        commonLog.setOperName("我修改了你");
        mongoTemplate.save(commonLog);
    }
 // 第二種
    Query query = Query.query(Criteria.where("id").is("65151d8f112fec57886da00d"));
    Update update = new Update().set("requestMethod", "update");
    mongoTemplate.updateFirst(query, update, CommonLog.class);

}

「根據(jù)id刪除:」

@DeleteMapping("deleteCommonLogById")
public void deleteCommonLogById(@RequestParam String id) {
    mongoTemplate.remove(Query.query(Criteria.where("id").is(id)), CommonLog.class);
}

七、總結(jié)

我們從非關(guān)系型數(shù)據(jù)庫為切入點,引入了MongoDB,在進行介紹,著重介紹了特點,還有眾多應(yīng)用場景。

從安裝到連接,開始了整合Springboot實戰(zhàn),帶大家進行CRUD實戰(zhàn)操作。不知道大家有沒有對MongoDB有了進一步的了解呢!

「趕快在項目中使用一下吧,有的時候不是需要這個技術(shù)來解決什么痛點,有時就是自己想拓展一下自己的技術(shù)棧,當(dāng)然前提是在不影響系統(tǒng)的情況下哈!」

責(zé)任編輯:姜華 來源: 小王博客基地
相關(guān)推薦

2025-04-22 07:52:59

2010-02-06 15:31:18

ibmdwAndroid

2009-07-22 14:55:16

ibmdwAndroid

2016-12-08 22:39:40

Android

2017-05-09 08:48:44

機器學(xué)習(xí)

2022-06-10 08:17:52

HashMap鏈表紅黑樹

2012-02-29 00:49:06

Linux學(xué)習(xí)

2025-02-24 10:07:10

2010-11-08 10:20:18

2024-02-26 08:52:20

Python傳遞函數(shù)參數(shù)參數(shù)傳遞類型

2022-09-02 15:11:18

開發(fā)工具

2020-06-18 14:39:42

MongoDB數(shù)據(jù)數(shù)據(jù)庫

2009-07-03 18:49:00

網(wǎng)吧綜合布線

2011-10-26 20:47:36

ssh 安全

2024-06-07 08:51:50

OpenPyXLPythonExcel文件

2025-03-21 14:31:14

NumPyPython數(shù)組

2017-01-09 09:34:03

Docker容器傳統(tǒng)虛擬機

2009-03-19 13:36:53

SSH安全通道遠程

2023-01-04 07:44:09

2024-01-11 09:35:12

單元測試Python編程軟件開發(fā)
點贊
收藏

51CTO技術(shù)棧公眾號