文章简介
- 学之前了解知识点
了解NoSQL是什么,和MongoDB什么关系
了解CAP定理
其他知识点 - MongoDB(这里只讲Java操作MongoDB)
学之前了解知识点
- 了解NoSQL是什么,和MongoDB什么关系
NoSQL简介 NoSQL的意思是“不仅仅是SQL”,是目前流行的“非关系型数据库”的统称。 常见的NoSQL数据库如:Redis、CouchDB、MongoDB、HBase、Cassandra等 - 了解CAP定理
CAP定理, 又被称作布鲁尔定理(Eric Brewer)
它指出对于一个分布式计算系统来说,不可能同时满足以下三点:
1:强一致性(Consistency):系统在执行过某项操作后仍然处于一致的,在分布式系统中,更 新操作执行成功后所有的用户都应该读取到最新的值,这样的系统被认为具有强一致性
2:可用性(Availability):每一个操作总是能够在一定的时间内返回结果
3:分区容错性(Partition tolerance):系统在存在网络分区的情况下仍然可以接受请求并处 理,这里网络分区是指由于某种原因网络被分成若干个孤立区域,而区域之间互不相通
- 根据CAP原理将数据库分成了满足CA原则、满足CP原则和满足AP原则三大类: 1:CA:单点集群,满足一致性,可用性,通常在可扩展性上不太强大,比如RDB
2:CP:满足一致性和分区容错性,通常性能不是特别高,如分布式数据库
3:AP:满足可用性和分区容错性,通常可能对一致性要求低一些,如大多数的NoSQL
其他知识点
一般以下的数据库都是安装到linux(我认为是非线性的数据库):redis,MongoDB
像这些数据库,最基本的要知道存储类型,增删改查的方法
MongoDB
- 传统的Java代码实现:
- 获取驱动
1)通过Maven来获取
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>2.12.1</version>
</dependency>
2)如果不是Maven工程,也可下载mongoDB对Java支持的驱动包
地址:https://github.com/mongodb/mongo-java-driver/downloads
2.连接MongoDB服务,示例:
MongoClientmongo = new MongoClient(“192.168.1.106”,27017);
说明:
MongoClient内部实现了一个连接池,默认初始化10个连接,MongoClient对象是线 程安全的,因此可以只创建一个,在多线程环境下安全使用。 另外要注意,close方法将关闭当前所有活跃的连接,所以应该在确定不再使用 MongoDB的时候才应该关闭
3.连接池的配置,可以修改连接池的默认配置,方法是:
1:先创建MongoClientOptions对象
2:设置该对象里面的属性值,常见的有:
(1)connectionsPerHost:每个主机的连接数
(2)threadsAllowedToBlockForConnectionMultiplier:线程队列数,它与connectionsPerHost值相乘的 结果就是线程队列最大值。如果连接线程满了,就会抛出“Out of semaphores to get db”错误。
(3)maxWaitTime:最大等待连接的线程阻塞时间
(4)connectTimeout:连接超时的毫秒。默认是0,表示不超时
(5)socketTimeout:socket超时。默认是0,表示不超时
(6)autoConnectRetry:控制是否在一个连接出问题时,系统会自动重试
3:然后再连接MongoDB,此时加入选项参数即可
4.连接到MongoDB数据库,示例
DB db= mongo.getDB(“mydb”);
注意: 1:数据库名区分大小写,另外如果数据库不存在,不会报错,而是新建一个
2: DB对象代表了和数据库的一个连接。默认情况下,当执行完数据库的查询或者更新操作后,连接将自动 回到连接池中。不需要我们手动调用代码放回池中。
5.获取要操作的集合,示例
DBCollectionusers = db.getCollection(“users”)
6.操作
新增 :
1:第一种方式,示例:
BasicDBObjectdata1 = new BasicDBObject();
data1.put("userId", "u1234");
data1.put("name", "name123");
//或者 data1.append("userId", "u1234").append("name", "name123");
users.insert(data1);//或者users.save(data1);
2:第二种方式,示例:
BasicDBObjectBuilderdata1 =BasicDBObjectBuilder.start().add("userId","u234").add("name","name234"); users.insert(data1.get());
3:第三种方式,示例:
Map<String, Object> data1 = new HashMap<String, Object>();
data1.put("userId","u345");
users.insert(newBasicDBObject(data1));
4:第四种方式,示例:
String json= "{'userId': 'u456','name' : 'name456'}";
DBObjectdata1 = (DBObject)JSON.parse(json); users.insert(data1);
删除示例
users.remove(newBasicDBObject("userId","u1"));
修改示例
DBObjectcondition = new BasicDBObject("userId","u234");
users.update(condition, new BasicDBObject("userId","cc").append("name","cc"));
当然也可以使用修改器,比如:
users.update(condition, new BasicDBObject("$set",new BasicDBObject("name","ccNew")));
查询示例
1:查询全部数据 DBCursordbCursor= users.find();
while(dbCursor.hasNext()){
System.out.println(dbCursor.next());
}
2:查询第一个文档
users.findOne();
3:带条件查询,还可以限制返回的记录数
DBObjectcondition = new BasicDBObject("userId","u1234");
DBCursordbCursor= users.find(condition).limit(5);
又比如:查询userId大于等于u1的数据,并按照userId降序排列:
DBObjectcondition = new BasicDBObject("userId",newBasicDBObject("$gte","u1")); DBCursordbCursor= users.find(condition).sort(newBasicDBObject("userId",-1));
如果要分页,在后面加上skip和limit,如: users.find(condition).sort(newBasicDBObject("userId",-1)).skip(1).limit(2);
4:约束要返回的字段,如: users.find(condition,newBasicDBObject("userId",1).append("_id",0));
其他API说明
1:创建集合,示例:db.createCollection("mycol");
2:授权认证,示例:booleanauth = db.authenticate(userName, pwd);
3:查找并删除的方法:collection.findAndRemove
4:获取所有数据库的名字的方法:mongo.getDatabaseNames()
5:获取所有集合的名字的方法:db.getCollectionNames();
6:在一个连接上执行多个操作,可以用: db.requestStart(); 结束的时候用 db.requestDone(); 。。。还有很多,看API吧
- 整合Spring
第一步:加入lib包,在Maven中
注意:Spring通过Spring Data MongoDB模块来集成和支持MongoDB
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
<version>1.5.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.4.2.RELEASE</version>
</dependency>
第二步:在Spring的配置文件中,加入如下的命名空间
xmlns:mongo=http://www.springframework.org/schema/data/mongo
对应的location是:
http://www.springframework.org/schema/data/mongo
http://www.springframework.org/schema/data/mongo/spring-mongo-1.5.xsd
第三步:然后加入如下的Bean配置:
<mongo:mongohost="192.168.1.106" port="20000"></mongo:mongo>
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-argref="mongo"/>
<constructor-argname="databaseName" value="db2"/>
</bean>