MongoDB簡介
MongoDB是由 C++的一個基于分布式文件存儲的數(shù)據(jù)庫,為 WEB 應用提供可擴展的高性能數(shù)據(jù)存儲解決方案蛾娶。支持的數(shù)據(jù)結構非常松散敦腔,因此可以存儲比較復雜的數(shù)據(jù)類型。模式自由(schema-free)胞谭,意味著對于存儲在MongoDB數(shù)據(jù)庫中的文件垃杖,不需要知道任何結構定義,完全可以把不同結構的文件存儲在同一個數(shù)據(jù)庫里丈屹。所以說MongoDB 是一個介于關系數(shù)據(jù)庫和非關系數(shù)據(jù)庫之間的產(chǎn)品调俘,是非關系數(shù)據(jù)庫當中功能最豐富,最像關系數(shù)據(jù)庫的。
Github地址:https://github.com/mongodb/mongo
官方網(wǎng)站:https://www.mongodb.com/
官方文檔:https://docs.mongodb.com/
中文社區(qū):http://www.mongoing.com/
文件數(shù)據(jù)庫
MongoDB中的記錄是一個文檔脉漏,它是由字段和值對組成的數(shù)據(jù)結構苞冯。MongoDB文檔類似于JSON對象。字段的值可以包括其他文檔侧巨,數(shù)組和文檔數(shù)組舅锄。
MongoDB主要特點:
1.高性能:對嵌入式數(shù)據(jù)模型的支持,減少了對數(shù)據(jù)庫IO操作司忱。索引支持更快的查詢皇忿,并且可以包含來自嵌入式文檔和數(shù)組的鍵。
2.豐富的查詢語言:MongoDB支持豐富的查詢語言以支持讀寫操作(CRUD)以及數(shù)據(jù)聚合坦仍,文本搜索和空間查詢
3.高可用性:MongoDB的拷貝工具稱為副本集鳍烁,副本集就是通過部署多個mongod實例構成的一個集群,這個集群中的mongod之間有主從關系繁扎。提供了數(shù)據(jù)復制冗余和通過選舉機制實現(xiàn)自動故障轉移
4.水平可伸縮性:MongoDB提供了分片集群部署模式幔荒,在分片集群部署中,每個分片負責保存一部分數(shù)據(jù)梳玫,對于每個分片爹梁,仍然可以采用副本集的方式,通過復制冗余的方式提澎,保證這部分數(shù)據(jù)的高可用性姚垃。從3.4版本開始,MongoDB支持基于分片鍵創(chuàng)建數(shù)據(jù)區(qū)域盼忌。在集群中积糯,MongoDB僅將區(qū)域覆蓋的讀取和寫入指向區(qū)域內(nèi)的分片。
5.MongoDB支持多個存儲引擎
WiredTiger(默認存儲引擎):非常適合大多數(shù)工作負載,提供文檔級并發(fā)模型谦纱,檢查點和壓縮等功能看成,還支持靜態(tài)加密。
內(nèi)存存儲引擎:它不是將文檔存儲在磁盤上服协,而是將它們保留在內(nèi)存中绍昂,以實現(xiàn)更可預測的數(shù)據(jù)延遲。
MMAPv1:是MongoDB 3.0及更早版本的默認存儲引擎偿荷,現(xiàn)不推薦使用
下載社區(qū)版
下載地址:https://www.mongodb.com/download-center/community
推薦下載安裝版窘游,可以直接安裝配置為系統(tǒng)服務
安裝步驟
1.Next
2.接受,next
3.如果不想把軟件裝在系統(tǒng)盤跳纳,就選擇Custom忍饰,然后Next
4.選擇安裝路徑,next
5.從 MongoDB 4.0 開始寺庄,可以在安裝期間配置 MongoDB 作為服務艾蓝,不需要像以前版本那樣輸入一堆命令來將 MongoDB 配置成 Windows 服務來自動運行力崇。
網(wǎng)絡服務用戶: Windows 內(nèi)置的 Windows 用戶帳戶
本地或域用戶:
對于現(xiàn)有本地用戶帳戶,Account Domain
指定為.
赢织,并為該用戶指定 Account Name
和 Account Password
對于現(xiàn)有域用戶亮靴,指定 Account Domain
,Account Name
和 Account Password
Service Name
:也就是Windows 服務的服務名于置,如果你已有指定名稱的服務茧吊,則必須選擇其他名稱。
Data Directory
:數(shù)據(jù)保存目錄八毯,如果該目錄不存在搓侄,安裝程序將創(chuàng)建該目錄并為服務用戶設置訪問權限
Log Directory
:日志保存目錄,如果該目錄不存在话速,安裝程序將創(chuàng)建該目錄并為服務用戶設置訪問權限
6.不要勾選 Install MongoDB Compass
讶踪,貌似勾選安裝MongoDB Compass
的話會很慢,這個不影響使用
7.開始安裝
啟動
安裝完啟動會發(fā)現(xiàn)啟動失敗泊交,先ignore
忽略掉
安裝完成
啟動服務成功的話需要到bin
目錄下找到mongod.cfg
文件
找到并打開編輯乳讥,把mp:
去掉,保存
WIN+X
進入計算機管理→服務和應用程序→服務活合,
找到對應服務將其啟動即可
MongoDB默認端口是27017
雏婶,所以在瀏覽器上訪問http://localhost:27017/,需要修改可以到mongod.cfg
文件中配置
顯示如下圖說明啟動成功白指,可以使用Navicat可視化工具對MongoDB進行操作
MongoDB與SpringBoot進行集成
以圖片上傳為例子
實體類
@Data
public class File {
private String id;
private String name;
private String contentType;
private long size;
private byte[] content;
public File(String name, String contentType, long size,byte[] content) {
this.name = name;
this.contentType = contentType;
this.size = size;
this.content = content;
}
}
兩種方式實現(xiàn)DAO層
1.實現(xiàn)MongoRepository
統(tǒng)一接口操作MongoDB
Spring Data JPA和Spring Data MongoDB共享相同的通用基礎架構。與JPA存儲庫一樣酵紫,基本原則是基于方法名稱自動構造查詢告嘲。
public interface FileRepository extends MongoRepository<File, String> {
}
MongoRepository
源碼如下
@NoRepositoryBean
public interface MongoRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
<S extends T> List<S> saveAll(Iterable<S> var1);
List<T> findAll();
List<T> findAll(Sort var1);
<S extends T> S insert(S var1);
<S extends T> List<S> insert(Iterable<S> var1);
<S extends T> List<S> findAll(Example<S> var1);
<S extends T> List<S> findAll(Example<S> var1, Sort var2);
}
為什么具有Crud操作呢
注意看以下繼承關系
public interface MongoRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T>
public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID>
不難發(fā)現(xiàn)最后有繼承CrudRepository
接口
CrudRepository源碼
@NoRepositoryBean
public interface CrudRepository<T, ID> extends Repository<T, ID> {
<S extends T> S save(S var1);
<S extends T> Iterable<S> saveAll(Iterable<S> var1);
Optional<T> findById(ID var1);
boolean existsById(ID var1);
Iterable<T> findAll();
Iterable<T> findAllById(Iterable<ID> var1);
long count();
void deleteById(ID var1);
void delete(T var1);
void deleteAll(Iterable<? extends T> var1);
void deleteAll();
}
2.使用Spring Data MongoDB提供的MongoTemplate,與Spring的JdbcTemplate
設計非常相似
Controller層奖地,這里選擇使用MongoTemplate
橄唬,直接注入使用即可
@RestController
public class FileUploadApi {
@Autowired
MongoTemplate mongoTemplate;
@PostMapping("/upload")
public JSONObject handleFileUpload(@RequestParam MultipartFile file) {
JSONObject jsonObject=new JSONObject();
try {
File newFile=mongoTemplate.save(new File(file.getOriginalFilename(), file.getContentType(), file.getSize(), file.getBytes()));
jsonObject.put("file_message",mongoTemplate.findById(newFile.getId(),File.class));
} catch (IOException ex) {
jsonObject.put("file_message","上傳失敗");
}
return jsonObject;
}
}
關于SpringBoot配置
spring.data.mongodb.database
設置MongoDB連接數(shù)據(jù)庫,默認情況下連接的是test
數(shù)據(jù)庫
spring.data.mongodb.host
MongoDB服務器地址参歹,默認localhost
spring.data.mongodb.port
端口仰楚,默認 27017
spring.data.mongodb.uri
MongoDB的uri
,多用于集群犬庇,默認mongodb://localhost/test僧界,多數(shù)據(jù)源用,
分隔
啟動測試
Navicat中看到存入的數(shù)據(jù),_id
和_class
是MongoDB自動生成的
推薦參考:
官方示例:https://github.com/spring-projects/spring-data-book/tree/master/mongodb
API文檔:https://docs.spring.io/spring-data/mongodb/docs/2.1.3.RELEASE/api/