mongodb是非关系型数据库,他的存储数据可以超过上亿条(老版本的mongodb有丢数据的情况,新版本不会有,网上说的),mongodb适合存储 一些量大表关系较简单的数据,例如用户信息,用户注册信息,公司注册信息,留言,评论,操作日志,mongodb还能用分布式文件存储信息,我们主要用mongodb来存储我们项目里面的操作日志(银行的付款转账记录,角色权限的变动日志),我们主要是结合aop来使用的,首先我们来配置一个aop的切面类,再给aop的使用规则,哪个类里面的哪个方法使用当前切面类,利用后置通知类获取当前方法的操作日志,将操作日志存储到mongodb,然后进行分类管理查看。利用后置通知传到数据库。一键获取Spring和mongodb西相关资料和面试题。
从目前阿里云 MongoDB 云数据库上的用户看,MongoDB的应用已经涉及到各个领域,比如游戏、物流、电商、内容管理、社交、物联网、视频直播等,之所以采用mongodb是因为:
MongoDB是NoSQL的非关系型数据库,他的存储数据可以超过上亿条(老版本的mongodb有丢数据的情况,新版本不会有,网上说的),mongodb适合存储 一些量大表关系较简单的数据,易于扩展,可以进行分布式文件存储,适用于大数据量、高并发、弱事务的互联网应用,以下是几个实际的应用案例:
在我们实际项目中:
【补充:如果问到副本集是怎么搭建的,就说我们有专门的运维人员来负责搭建,我只负责用Java程序去进行操作】
MongoDB 副本集(Replica Set)是有自动故障恢复功能的主从集群,有一个Primary节点和一个或多个Secondary节点组成。
在副本集的环境中,要是所有的Secondary都宕机了,只剩下Primary。最后Primary会变成Secondary,不能提供服务。
副本集的同步和主从同步一样,都是异步同步的过程,不同的是副本集有个自动故障转移的功能。其原理是:slave端从primary端获取日志,然后在自己身上完全顺序的执行日志所记录的各种操作(该日志是不记录查询操作的)
要想整合Spring和Mongodb必须下载相应的jar,这里主要是用到两种jar一种是spring-data-document和spring-data-commons两种类型的jar
新建application.xml配置文件
这个必须要的引入mongodb标签xmlns:mongo=“ http://www.springframework.org/schema/data/mongo”
在配置文件中加入链接mongodb客服端
注入mogondb的bean对象
public interface AbstractRepository { public void insert(Person person); public Person findOne(String id); public List findAll(); public List findByRegex(String regex); public void removeOne(String id); public void removeAll(); public void findAndModify(String id); }
再写对应接口的实现类:
import java.util.List; import java.util.regex.Pattern; import org.springframework.data.document.mongodb.MongoTemplate; import org.springframework.data.document.mongodb.query.Criteria; import org.springframework.data.document.mongodb.query.Query; import org.springframework.data.document.mongodb.query.Update; import com.mongo.entity.Person; import com.mongo.intf.AbstractRepository; public class PersonRepository implements AbstractRepository{ private MongoTemplate mongoTemplate; @Override public List findAll() { return getMongoTemplate().find(new Query(), Person.class); } @Override public void findAndModify(String id) { getMongoTemplate().updateFirst(new Query(Criteria.where("id").is(id)), new Update().inc("age", 3)); } @Override public List findByRegex(String regex) { Pattern pattern = Pattern.compile(regex,Pattern.CASE_INSENSITIVE); Criteria criteria = new Criteria("name").regex(pattern.toString()); return getMongoTemplate().find(new Query(criteria), Person.class); } @Override public Person findOne(String id) { return getMongoTemplate().findOne(new Query(Criteria.where("id").is(id)), Person.class); } @Override public void insert(Person person) { getMongoTemplate().insert(person); } @Override public void removeAll() { List list = this.findAll(); if(list != null){ for(Person person : list){ getMongoTemplate().remove(person); } } } @Override public void removeOne(String id){ Criteria criteria = Criteria.where("id").in(id); if(criteria == null){ Query query = new Query(criteria); if(query != null && getMongoTemplate().findOne(query, Person.class) != null) getMongoTemplate().remove(getMongoTemplate().findOne(query, Person.class)); }} public MongoTemplate getMongoTemplate() { return mongoTemplate; } public void setMongoTemplate(MongoTemplate mongoTemplate) { this.mongoTemplate = mongoTemplate; }}