簡單介紹MongoDB,包括MongoDB的使用場景、和MySQL的對比、安裝部署、Java客戶端訪問及總結前端
咱們遵循需求驅動技術的原則,經過一個場景來引入MongoDB,在現行業務需求下考慮下面三個問題:java
以公司站點報告業務場景(當前其實已換成hdfs):mysql
原有的解決方案(MySQL+Redis)linux
MongoDB特性spring
如此看來,MongoDB太強大了,彷佛一種招招要了MySQL命的感受,不過千萬別這麼想,畢竟術業有專攻!
那如今就讓咱們來看看MongoDB的廬山真面目。sql
插播一段廣告,這裏引用官方網站上MongoDB的查詢示例比較下MySQL和MongoDB。mongodb
MongoDB & MySQL查詢比較數據庫
有沒有一種他們倆長的真像的感受,沒錯你答對了,MongoDB被稱做是最像關係型數據庫的NOSQL數據庫。json
舒適提示windows
安裝
[mongodb] name=MongoDB Repository baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/ gpgcheck=0 enabled=1
32位:
name=MongoDB Repository baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/i686/ gpgcheck=0 enabled=1
啓動
關閉
安裝
啓動
關閉
通常狀況下,對於開發人員,咱們更加關心MongoDB的Driver,和Mysql同樣,它天然是多語言版的,做爲Java開發人員,咱們介紹MongoDB Java Driver。
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>2.13.0</version> </dependency>
咱們以java代碼方式操做MongoDB,而後用圖形化的工具查看結果.
@Test public void insert() throws Exception { // 新建客戶端. MongoClient client = new MongoClient("127.0.0.1", 27017); // 獲取DB. DB db = client.getDB("testDB"); // 獲取文檔集. DBCollection collection = db.getCollection("demo"); // 一行記錄. // json: {"name" : "someone" , "age" : 18 , "gender" : 1 , "address" : { "country" : "china" , "city" : "shanghai"}} BasicDBObject user = new BasicDBObject("name", "someone") .append("age", 18) .append("gender", 1) .append("address", new BasicDBObject("country", "china").append("city", "shanghai")); System.out.println(collection.insert(user)); // 關閉客戶端 client.close(); }
@Test public void query() throws Exception { // 新建客戶端. MongoClient client = new MongoClient("127.0.0.1", 27017); // 獲取DB. DB db = client.getDB("testDB"); // 獲取文檔集. DBCollection collection = db.getCollection("demo"); // 條件: { "name" : "someone"} BasicDBObject match = new BasicDBObject("name", "someone"); // 執行查詢並打印結果集列表. System.out.println(collection.find(match).toArray()); // 關閉客戶端 client.close(); }
@Test public void update() throws Exception { // 新建客戶端. MongoClient client = new MongoClient("127.0.0.1", 27017); // 獲取DB. DB db = client.getDB("testDB"); // 獲取文檔集. DBCollection collection = db.getCollection("demo"); // 條件. // json: {"name" : "someone"} BasicDBObject match = new BasicDBObject("name", "someone"); // set:{"age": 28} BasicDBObject updatedValue = new BasicDBObject(); updatedValue.put("age", 28); DBObject updateSetValue = new BasicDBObject("$set", updatedValue); // 執行更新並打印. //update api: DBObject q, DBObject o, boolean upsert, boolean multi. //upsert:若爲true,沒有找到匹配的記錄時會執行新增一條記錄,false則不作任何處理. //multi:若爲false,表示只更新查詢到的一條記錄,true則表示更新全部匹配記錄. System.out.println(collection.update(match, updateSetValue, false, true)); // 關閉客戶端 client.close(); }
@Test public void delete() throws Exception { // 新建客戶端. MongoClient client = new MongoClient("127.0.0.1", 27017); // 獲取DB. DB db = client.getDB("testDB"); // 獲取文檔集. DBCollection collection = db.getCollection("demo"); // 條件. // json: {"name" : "someone"} BasicDBObject match = new BasicDBObject("name", "someone"); // 刪除匹配記錄. System.out.println(collection.remove(match)); // 關閉客戶端 client.close(); }
基於MongoDB的driver,有不少第三方封裝的包,好比:
大多數框架都支持以POJO的方式開發基於MongoDB的應用!
Indicator | MongoDB | MySQL |
---|---|---|
大數據支持 | 較強 | 通常 |
ACID | 部分支持 | 所有 |
SQL特性 | 非結構化,支持部分SQL語言特性 | 徹底支持SQL語言規範,標準化,交互性強 |
擴展 | 自動擴展 | 有必定的硬件成本,須要第三方程序 |
應用靈活性 | 高 | 通常 |
MongoDB與MySQL是互補的關係
MongoDB沒有全面的ACID支持,所以不能將有事務場景的業務底層存儲從MySQL改成NOSQL