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. hadoop搭建的前期准备

    这个hadoop的搭建是以比赛前的练习为目的的,所以我直接以root用户来搭建hadoop,主要也是方便我自己以后复习用的 需要的软件:vmware15.5,xshell6,xftp6,jdk Lin ...

  2. Python语法速查: 7. 函数基础

    返回目录 (1)函数基本 ● 函数是第一类对象 Python中万物皆对象,所有对象都是第一类的(first class),函数也不例外,也是第一类对象.既然是对象,那就可以当作普通的对象数据处理,比如 ...

  3. tensorflow基本用法个人笔记

    综述   TensorFlow程序分为构建阶段和执行阶段.通过构建一个图.执行这个图来得到结果. 构建图   创建源op,源op不需要任何输入,例如常量constant,源op的输出被传递给其他op做 ...

  4. 关于spring boot上手的一点介绍

    在spring官网网址 https://spring.io/guides 下,有许多相关介绍,包括可以构建的例子程序. 使用intellij idea,可以通过新建 spring boot initi ...

  5. OpenGL 之 Compute Shader(通用计算并行加速)

    平常我们使用的Shader有顶点着色器.几何着色器.片段着色器,这几个都是为光栅化图形渲染服务的,OpenGL 4.3之后新出了一个Compute Shader,用于通用计算并行加速,现在对其进行介绍 ...

  6. 关于controller层用实体类接收参数为null的问题

    如果你的表单标签中包含enctype="multipart/form-data"属性,那么请将它删掉<form action="xxxxxxx" id=& ...

  7. 关于python的中国历年城市天气信息爬取

    一.主题式网络爬虫设计方案(15分)1.主题式网络爬虫名称 关于python的中国城市天气网爬取 2.主题式网络爬虫爬取的内容与数据特征分析 爬取中国天气网各个城市每年各个月份的天气数据, 包括最高城 ...

  8. Java 创建线程的3种方法及各自优势

    1. 继承 Thread 类,然后调用 start 方法. class MyThread extends Thread { //重写run方法,线程运行后,跑的就是run方法 public void ...

  9. PHP Swoole与TCP三次握手

    握手常见问题 1.连接拒绝 2.Operation now in progress 多是因为丢包.错误ip.backlog满了&阻塞&tcp_abort_on_overflow=0 3 ...

  10. Java描述设计模式(12):外观模式

    本文源码:GitHub·点这里 || GitEE·点这里 一.生活场景 1.场景描述 在移动互联网没有普及之前,去饭店吃饭的流程大致如下:选座位,排队,点菜,结账.后来移动互联网普及,通过手机APP就 ...