Mongodb总结

一、NoSQL型数据库介绍

NoSQL,泛指非关系型的数据库。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。

NoSQL数据库有四大分类,分别是:键值存储数据库,列存储数据库,文档型数据库和图形数据库。总结NoSQL数据库在以下的这几种情况下比较适用:

  1. 数据模型比较简单;
  2. 需要灵活性更强的IT系统;
  3. 对数据库性能要求较高;
  4. 不需要高度的数据一致性;
  5. 对于给定key,比较容易映射复杂值的环境。

二、MongoDB介绍

MongoDB 是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式备受当前IT从业人员的青睐。MongoDB很好的实现了面向对象的思想(OO思想),在MongoDB中 每一条记录都是一个Document对象。

MongoDB最大的优势在于所有的数据持久操作都无需开发人员手动编写SQL语句,直接调用方法就可以轻松的实现CRUD操作。

MongoDB的文档模型自由灵活,可以让你在开发过程中畅顺无比。对于大数据量、高并发、弱事务的互联网应用,MongoDB可以应对自如。MongoDB内置的水平扩展机制提供了从百万到十亿级别的数据量处理能力,完全可以满足Web2.0和移动互联网的数据存储需求,其开箱即用的特性也大大降低了中小型网站的运维成本。

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。它是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。MongoDB最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:

  • 面向集合存储,易存储对象类型的数据。
  • 模式自由。
  • 支持动态查询。
  • 支持完全索引,包含内部对象。
  • 支持查询。
  • 支持复制和故障恢复。
  • 使用高效的二进制数据存储,包括大型对象(如视频等)。
  • 自动处理碎片,以支持云计算层次的扩展性。
  • 支持RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
  • 文件存储格式为BSON(一种JSON的扩展)。
  • 可通过网络访问。

三、mongo使用场景

mongodb的主要目标是在键/值存储方式(提供了高性能和高度伸缩性)以及传统的RDBMS系统(丰富的功能)架起一座桥梁,集两者的优势于一身。

  1. mongo适用于以下场景:

    • 网站数据:mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
    • 缓存:由于性能很高,mongo也适合作为信息基础设施的缓存层。在系统重启之后,由mongo搭建的持久化缓存可以避免下层的数据源过载。
    • 大尺寸、低价值的数据:使用传统的关系数据库存储一些数据时可能会比较贵,在此之前,很多程序员往往会选择传统的文件进行存储。
    • 高伸缩性的场景:mongo非常适合由数十或者数百台服务器组成的数据库。
    • 用于对象及JSON数据的存储:mongo的BSON数据格式非常适合文档格式化的存储及查询。
  2. 不适合的场景:

    • 高度事物性的系统:例如银行或会计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序。
    • 传统的商业智能应用:针对特定问题的BI数据库会对产生高度优化的查询方式。对于此类应用,数据仓库可能是更合适的选择。
    • 需要SQL的问题。

四、基础CRUD

> mongo 127.0.0.1:27017
show dbs;
use test;
 
// 模糊匹配
db.getCollection('CacheONUPONPort_100').find({neName:{'$regex':'\\QAN5516‐
01_10\\E'}}).limit(10);
 
// 过滤,排序,分页
db.getCollection('CacheOnuPonPortCollection1').find({onuSerType:'Vip'}).count();
db.getCollection('CacheOnuPonPortCollection1').find({onuSerType:'Vip'}).sort({onuId:1}).skip(100
00).limit(10);
 
//通过聚合函数进行过滤分页排序
db.getCollection('CacheOnuPonPortCollection1').aggregate([
     {$match:{"onuSerType":"Vip"}},     
     {$sort:{"onuId":1}},     
     {$skip:0},     
     {$limit:10}     
 ],{allowDiskUse:true});     
db.getCollection('CacheONUPONPort').aggregate([
     {$match:{"onuSvcType":"Vip"}},     
         {$count:"total"}
 ],{allowDiskUse:true});     
 
// 插入,删除
db.user.insert({_id:1, name:'vv', age:17, phone:'15872501234', address:'wuhan'});
db.user.find({address:'wuhan'},{name:1, phone:1}).sort({age:1});
db.user.remove({_id:1});

五、高级查询

  • 游标
    // cursor
var cursor = db.CacheOnuPonPortCollection10.find({});
while(cursor.hasNext()){
  var doc = cursor.next();
}
  • 索引
      // index
db.stu.getIndexes();
db.stu.ensureIndex({name:1}); 
  • 聚合

   // 聚合后求每组数量
db.CacheOnuPonPortCollection1.aggregate([
     {$match:{"oltId":{"$in":[19930320]}}},     
             {$group:{
                 _id:"$oltId",
                 "num":{$sum:1}
                 }}
 ]);     

聚合对应的java代码

    // cursor
var cursor = db.CacheOnuPonPortCollection10.find({});
while(cursor.hasNext()){
       var doc = cursor.next();
    }
// index
db.stu.getIndexes();
db.stu.ensureIndex({name:1}); // 聚合后求每组数量
db.CacheOnuPonPortCollection1.aggregate([
     {$match:{"oltId":{"$in":[19930320]}}},     
             {$group:{
                 _id:"$oltId",
                 "num":{$sum:1}
                 }}
 ]);

六、spring-data集成mongodb

 Spring Data MongoDB配置

  1. applicationContext-mongo.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:mongo="http://www.springframework.org/schema/data/mongo"
    xmlns="http://www.springframework.org/schema/beans"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd"> <mongo:repositories
    base-package="com.fiberhome.mongo">
    </mongo:repositories> <mongo:mongo-client host="${mongodb.ip:127.0.0.1}" port="${mongodb.port:26501}" id="mongo"
    credentials="${mongodb.username}:${mongodb.password}@admin">
    <!--<mongo:client-options connect-timeout="1000"-->
    <!--connections-per-host="500"-->
    <!--max-connection-idle-time="1000"-->
    <!--threads-allowed-to-block-for-connection-multiplier="4"-->
    <!--&gt;</mongo:client-options>-->
    </mongo:mongo-client> <!-- MongoDbFactory -->
    <mongo:db-factory id="mgFactory" dbname="${mongodb.dbname}"
    mongo-ref="mongo" /> <!-- MongoTemplate -->
    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg name="mongoDbFactory" ref="mgFactory" />
    </bean> </beans>
  2. 为模型添加注解,实现MongoDB持久化

    用于对象-文档映射的Spring Data MongoDB注解

    注  解 描  述

    • @Document 标示映射到MongoDB文档上的领域对象
    • @Id 标示某个域为ID域
    • @DbRef 标示某个域要引用其他的文档,这个文档有可能位于另外一个数据库中
    • @Field 为文档域指定自定义的元数据
    • @Version 标示某个属性用作版本域
  3. 编写MongoDB Repository

    • 扩展MongoRepository,它会继承多个方法,包括对Order文档进行CRUD操作的方法。
    public interface OrderRepository extends MongoRepository<Order, String> {
    
    }
    • 添加自定义的查询方法

    通常来讲,CRUD操作是很有用的,但我们有时候可能希望Repository提供除内置方法以外的其他方法。

    Spring Data MongoDB支持方法命名约定,它能够帮助Spring Data为遵循约定的方法自动生成实现。这意味着我们可以为OrderRepository添加自定义的方法:

    List<Order> findByCustomer(String customer);
    
    List<Order> findByCustomerLike(String customer);
    
    List<Order> findByCustomerAndType(String customer, String type);
    
    List<Order> getByType(String type);
    • 指定查询

    @Query注解可以为Repository方法指定自定义的查询。@Query能够像在JPA中那样用在MongoDB上。唯一的区别在于针对MongoDB时,@Query会接受一个JSON查询,而不是JPA查询。例如,假设我们想要查询给定类型的订单,并且要求customer的名称

    为“Chuck Wagon”。OrderRepository中如下的方法声明能够完成

    所需的任务:

    @Query("{customer:'Chuck Wagon'}")

    List findChucksOrders();

    • 混合自定义的功能

    定义中间接口,编写混合实现

    混合实现中注入了MongoOperations(也就是MongoTemplate所实现的接口)。findOrdersByType()方法使用MongoOperations对数据库进行了查询,查找匹配条件的文档。

    剩下的工作就是修改OrderRepository,让其扩展中间接口OrderOperations:

    将这些关联起来的关键点在于实现类的名称为OrderRepositoryImpl。这个名字前半部分与OrderRepository相同,只是添加了“Impl”后缀。当Spring DataMongoDB生成Repository实现时,它会查找这个类并将其混合到自动生成的实现中。

mongodb重点知识总结的更多相关文章

  1. 【转载】STL"源码"剖析-重点知识总结

    原文:STL"源码"剖析-重点知识总结 STL是C++重要的组件之一,大学时看过<STL源码剖析>这本书,这几天复习了一下,总结出以下LZ认为比较重要的知识点,内容有点 ...

  2. MongoDB基础知识 02

    MongoDB基础知识 02 6 数据类型 6.1 null : 表示空值或者不存在的字段 {"x":null} 6.2 布尔型 : 布尔类型只有两个值true和false {&q ...

  3. MongoDB基础知识 01

    MongoDB基础知识  1. 文档  文档是MongoDB中的数据的基本单元,类似于关系型数据库管理系统的行. 文档是键值对的一个有序集.通常包含一个或者多个键值对. 例如: {”greeting& ...

  4. DataBase MongoDB高级知识-易使用

    MongoDB高级知识-易使用 mongodb是一个面向文档的数据库,而不是关系型数据库.不采用关系模型主要是为了获取更好的扩展性.当然还有其他的一些好处. 与关系型数据库相比,面向文档的数据库不再有 ...

  5. DataBase MongoDB高级知识-易扩展

    MongoDB高级知识-易扩展 应用程序数据集的大小正在以不可思议的速度增长.随着可用宽带的增长和存储器价格的下跌,即使是一个小规模的应用程序,需要存储的数据也可能大的惊人,甚至超出了很多数据库的处理 ...

  6. DataBase MongoDB高级知识

    MongoDB高级知识 一.mongodb适合场景: 1.读写分离:MongoDB服务采用三节点副本集的高可用架构,三个数据节点位于不同的物理服务器上,自动同步数据.Primary和Secondary ...

  7. DataBase MongoDB基础知识记录

    MongoDB基础知识记录 一.概念: 讲mongdb就必须提一下nosql,因为mongdb是nosql的代表作: NoSQL(Not Only SQL ),意即“不仅仅是SQL” ,指的是非关系型 ...

  8. JavaScript重点知识(二)

    三.JS的API 3.1知识点(DOM) 1)DOM本质 将html结构化成浏览器和JS可识别可操作的东西 2)变量计算---强制类型转换 获取DOM节点 Attribute(对html标签属性的修改 ...

  9. Mongodb 笔记01 MongoDB 简介、MongoDB基础知识、启动和停止MongoDB

    MongoDB 简介 1. 易于使用:没有固定的模式,根据需要添加和删除字段更加容易 2. 易于扩展:MongoDB的设计采用横向扩展.面向文档的数据模型使它能很容易的再多台服务器之间进行分割.自动处 ...

随机推荐

  1. JavaScript定时器(Timer)

    版权声明:本文为博主原创文章,未经博主允许不得转载.https://www.cnblogs.com/gaoguowen/p/11119088.html 什么是定时器 简单来说就是在一段时间间隔后执行一 ...

  2. Spring Boot Mybatis 最基本使用mysql存储过程

    首先声明:只是用最简单的方法大致了解如何用存储过程开发,如果需要查看存储过程创建语法的自行百度搜索 一.首先创建最基本的数据库 CREATE TABLE `t_user` ( `id` varchar ...

  3. 《数据挖掘导论》实验课——实验四、数据挖掘之KNN,Naive Bayes

    实验四.数据挖掘之KNN,Naive Bayes 一.实验目的 1. 掌握KNN的原理 2. 掌握Naive Bayes的原理 3. 学会利用KNN与Navie Bayes解决分类问题 二.实验工具 ...

  4. 如何在Mac上使用Siri

    在您的iPhone上,要求Siri执行命令很简单.但是,如果在计算机上工作时附近没有iPhone,会发生什么情况?您也可以在Mac上使用Siri.快速简便,使其成为iMac或MacBook的完美伴侣. ...

  5. python之字符串的拼接总结

    加号连接 1.通过+号连接起来 逗号连接 2.通过都好连接起来 但是,这里值得注意的是,只能用于print打印,赋值组操作会生成元组 直接连接 3.直接连接中间有无空格均可 %连接 在python2. ...

  6. SpringBoot源码学习系列之Locale自动配置

    目录 1.spring.messages.cache-duration 2.LocaleResolver 的方法名必须为localeResolver 3.默认LocaleResolver 4.指定默认 ...

  7. kubernetes部署高可用redis

    本文redis通过helm搭建,提供redis高可用完整的编排,关于Helm的搭建和使用请查看文章<helm的搭建及使用>,其中前一章介绍了Helm搭建,并提供了Helm搭建Harbor的 ...

  8. ETCD:HTTP JSON API通过gRPC网关

    原文地址:HTTP JSON API through the gRPC gateway etcd v3 使用 gRPC 作为消息协议.etcd项目包括一个基于gRPC的Go客户端和一个命令行工具,et ...

  9. Java描述设计模式(10):组合模式

    本文源码:GitHub·点这里 || GitEE·点这里 一.生活场景 1.文件系统 下图是常见的计算机文件系统的一部分. 文件系统是一个树结构,树上长有节点.树的节点有两种: 树枝节点 即文件夹,有 ...

  10. [Spring cloud 一步步实现广告系统] 5. 投放系统配置+启动+实体类

    广告投放系统启动主类说明 /** * SponsorApplication for 广告赞助商/投递服务启动类 * 添加注解{@link EnableFeignClients}之后,当前微服务就可以调 ...