简单介绍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