`
阅读更多

1 页:

 

MongoDB Coming

2 页:大纲

大纲

简介

Why Mongo

Mongo 特性

Mongo 用法

Mongo 架构

MysqlMongo

Mongo java

Java DSL

3 页:简介

简介

MongoDB 不是在实验室设计出来的。利用自己开发大型,高可用性和健壮性系统的经验,我们开发了MongoDB 。我们并不是从零开始,而是发现 哪些地方有问题,然后尝试解决它。所以在我眼中,MongoDB 让你从使用MySQL 的基于关系的数据模型转变为基于文档的模型,从而获得如快速的嵌入式 文档,易管理,使用无模式数据库进行敏捷开发,易于横向扩展和伸缩(因为join 不再重要)等大量特性。使用关系型数据时有很多东西工作的很好,比如索 引,动态查询和动态更新等,这些在MongoDB 中也没怎么变化。比如,在MongoDB 里设计索引应该和你在MySQLOracle 里一样,你有选择 在一个内嵌的域上建索引的能力。

    – Eliot Horowitz, 10gen 公司首席技术官和联合创始人

4 页:Why Mongo

Why Mongo

面向文档

文档(对象)和编程语言的数据类型很好的对应

嵌入式文档和数组减少了join 的必要

动态类型(无schema )使模式演变非常容易

没有join 和多文档事务从而获得高性能和易伸缩性

高性能

没有join 和事务使得读写操作很快

可以索引嵌入式文档和数组

可选的异步写操作

高可用性

复制服务器自动和主节点故障转移

易伸缩

最终一致性读操作分布到复制服务器上

自动分片(数据跨服务器自动分区)

读写操作分布在不同的分片上

没有join 和事物使得分布式查询简单而高效

富查询语言

存储的JavaScript

Aggregation :支持Map Reduce 模型

限长集合

大文件,大数据量存储引擎

管理简单

5 页:Who Use

Who Use

http://www.mongodb.org/display/DOCS/Production+Deployments

6 页:Mongo 用法—文档

Mongo 用法 文档

文档是MongoDB 的基本存储单元

BSON

{"greeting" : "Hello, world!", "greeting" : "Hello, MongoDB!"}

每个文档都会有一个特殊的key, "_id",

7 页:Mongo 用法—Collection

Mongo 用法—Collection

集合 可以看成是关系数据库的表,但是是没有schema 限制的。

    {"greeting" : "Hello, world!"}

    {"foo" : 5}

命名:UTF-8 ,不能是“” ,不能含有\0$system 打头的集合是系统集合。如blog.posts

那我们只需要一个集合就够了吗?不够

程序开发起来很复杂

速度慢:会扫描很多无关的document

索引

使用时也需要按业务划分

8 页:Subcollections

Subcollections

blog.posts blog.authors ,两者没关系,并且和blog 也没关系

便于组织管理,Web Console

9 页:Database

Database

MongoDB 多数据库

数据库用来归类Collection

Database 是相互独立的,独立的文件存储

命名:Collection 规则,小写,最长64 字节

10 页:Mongo Shell

Mongo Shell

JavaScript shell shell 执行命令的地方

插入:db.foo.insert({"bar" : "baz"})

批量插入:性能

删除:db.mailing.list.remove({"opt-out" : true})

更新: var joe = db.users.findOne({"name" : "joe"});

     joe.relationships = {"friends" : joe.friends, "enemies" : joe.enemies};

    {

    "friends" : 32,

    "enemies" : 2

     }

    db.users.update({"name" : "joe"}, joe)

 

Upsert

查询:db.people.find()

    db.people.findOne({"name" : "joe", "age" : 20});

11 页:数据类型

数据类型

Null {"x" : null}

Boolean {"x" : true}

32-bit Integer

64-bit 浮点数:{"x" : 3.14}

String

object id 12-byte ID

Date milliseconds ,无TimeZone javaString

regular expression {"x" : /foobar/i}

Code javascript code {"x" : function() { /* ... */ }}

binary data String bytes

maximum value

minimum value

Undefined {"x" : undefined}

Array {"x" : ["a", "b", "c"]}

embedded document {"x" : {"foo" : "bar"}}

12 页:Modifiers (原子操作)

Modifiers (原子操作)

$set { $set : { field : value } }

$unset :删除,{ $unset : { field : 1} }

$inc { $inc : { field : value } }

$push

$pushAll { $pushAll : { field : value_array } }

$pull { $pull : { field : _value } }

$pullAll

$addToSet :不存在则添加。

$pop :删除数组的第一个或最后一个元素。{ $pop : { field : 1 } }

$rename { $rename : { old_field_name : new_field_name } }

$bit – 位操作,integer 类型。{$bit : { field : {and : 5}}}

$ 偏移操作符:

> t.find() { "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : "ABC", "comments" : [ { "by" : "joe", "votes" : 3 }, { "by" : "jane", "votes" : 7 } ] }

> t.update( {'comments.by':'joe'}, {$inc:{'comments.$.votes':1}}, false, true )

> t.find() { "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : "ABC", "comments" : [ { "by" : "joe", "votes" : 4 }, { "by" : "jane", "votes" : 7 } ] }

13 页:索引

索引

创建:

db.status.ensureIndex({user : 1, date : -1})

Unique

db.people.ensureIndex({"username" : 1}, {"unique" : true})

Compound Indexes

db.things.ensureIndex({j:1, name:-1});

db.foo.find().explain()

db.people.ensureIndex({“username” : 1}, {“background” : true}) backgroud :非阻塞,后台创建

db.collection.dropIndex({x: 1, y: -1})

14 页:Query language

Query language

查询条件

<, <=, >, >=

$all

$exists

$mod

$ne

$in

$nin

$nor

$or

$size

$type

$elemMatch

正则

$not

Cursor 方法

count()

limit()

skip()

snapshot()

sort()

Group()

例子:

db.users.find( { x : 3, y : "abc" } ).sort({x:1});

db.users.find({"age" : {"$gte" : 18, "$lte" : 30}})

15 页:Mongo 架构

Mongo 架构

复制:master-slavereplica set ,自动恢复

和主库最一致的从库会自动替代成为主库,这都是简单的配置就可做到的。




 

 

 

16 页:Mongo 架构

Mongo 架构

分区:Autoshard ,加减机器如此简单,再也不蛋疼。

Mongos :路由程序

Mongod :服务器端程序

 


 

 


17 页:备份

备份

热备份:

mongodump mongorestore

Fsync

Slave Backups

Repair :修复,同时会压缩数据

18 页:监控

监控

Web admin

Mongostat

ServerStatus command

19 页:安全

安全

用户名,密码

用户分为普通用户,管理员

IP 限制

20 页:Mysql Mongo

MysqlMongo

Mysql 分表

Mysql 分库

Mysql schema

Mysql master-slave 主从切换

迁移方法:用jackson mapperjsonDB 查询成Map

21 页:Mongo java

Mongo java

连接

Mongo m = new Mongo( "localhost" , 27017 );

DB db = m.getDB( "mydb" );

获取集合

DBCollection coll = db.getCollection("testCollection")

查询

query = new BasicDBObject();

query.put("i", new BasicDBObject("$gt", 20).append("$lte", 30)); // i.e. 20 < i <= 30

  cur = coll.find(query);

while(cur.hasNext()) { System.out.println(cur.next()); }

Insert

BasicDBObject doc = new BasicDBObject();

doc.put("name", "MongoDB");

doc.put("type", "database");

doc.put("count", 1);

BasicDBObject info = new BasicDBObject(); I

nfo.put("x", 203); info.put("y", 102);

doc.put("info", info);

coll.insert(doc);

22 页:Mongo USE CASES

Mongo USE CASES

Blog

UGC 数据

GridFS 存储图片和缩略图

23 页:体会

体会

爱内存

爱索引

爱原子操作

批量插入,异步写入

Java 驱动限制,需要很好的封装

开发效率低

性能貌似不错

24 页:Java DSL

Java dsl

Group

Shard 环境不能使用,需要用map reduce 模型替代

db.coll.group( {key: { a:true, b:true }, cond: { active:1 }, reduce: function(obj,prev) { prev.csum += obj.c; }, initial: { csum: 0 } });

key: Fields to group by.

reduce

keyf

cond

finalize:

 

java程序员写起来超级崩溃。

25 页:Group 例子

Group 例子

db.test.group(

{ cond: {"invoked_at.d": {$gte: "2009-11", $lt: "2009-12"}} ,

key: {http_action: true} ,

initial: {count: 0, total_time:0} ,

  reduce: function(doc, out){ out.count++; out.total_time+=doc.response_time } ,

  finalize: function(out){ out.avg_time = out.total_time / out.count } } );

26 页:查询框架

Java 驱动封装,面向对象的DSL 查询框架。不用java 开发人员写js 代码。

 

public enum Criteria {

    //select 使用PropertyCriteria 作为查询条件

    select(CriteriaType.select),

    unselect(CriteriaType.select),

    //group by 使用PropertyCriteria 作为查询条件

    groupBy(CriteriaType.groupBy),

    //order by 使用PropertyCriteria 作为查询条件

    asc(CriteriaType.orderBy),

    desc(CriteriaType.orderBy),

    //where 使用CriteriaValue 作为查询条件

    gt(CriteriaType.where),

    lt(CriteriaType.where),

    eq(CriteriaType.where),

    ne(CriteriaType.where),

    gte(CriteriaType.where),

    lte(CriteriaType.where),

    in(CriteriaType.where),

    // 组函数 使用PropertyCriteriaCriteriaValue 作为查询条件

   // (当作使用CriteriaValue 时,带的值为函数返回值的keynamePropertyCriteriakeynamepropname_functionname

    max(CriteriaType.groupFunction),

    min(CriteriaType.groupFunction),

    /**

      * 暂时不支持,可以用sum 除以count 代替

      */

    avg(CriteriaType.groupFunction),

    sum(CriteriaType.groupFunction),

    count(CriteriaType.groupFunction),

    // 多列组函数 使用PropertyCriteriaCriteriaValue 作为查询条件

    // 类似groupFunction ,但是prop 的值是用逗号多个字段名称的stringCriteriaValue 的值也是返回值key 的逗号拼接

    /**

      * 取最大值,并带出最大值时的其他属性

      */

    maxRow(CriteriaType.multiGroupFunction),

    /**

      * 取最小值,并带出当最小值时的其他属性

      */

    minRow(CriteriaType.multiGroupFunction),

    ;

    public final CriteriaType type;

   

    private Criteria(CriteriaType type) {

        this.type = type;

    }

}

分享到:
评论

相关推荐

    Linux安装mongodb客户端

    sudo vim /etc/yum.repos.d/mongodb-org-4.2.repo 写入: [mongodb-org-4.2] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/ gpgcheck=1 enabled=1 gpg...

    mongodb-测试数据

    MongoDB是一种流行的开源、分布式文档数据库,常被用于构建高性能、可扩展的应用程序。这个“mongodb-测试数据”压缩包显然包含了一些用于测试MongoDB功能的样例数据集,特别是针对增、删、改、查(CRUD)操作的学习...

    linux安装mongodb教程

    /usr/local/mongodb/mongodb-linux-2.0.7/bin/mongod --dbpath=/usr/local/mongodb/data/db --logpath=/usr/local/mongodb/mongodb-linux-2.0.7/logs/mongodb.log --logappend --port=27017 --fork 知识点 6:配置...

    spring-data使用mongodbTemplate对MongoDB进行读写操作

    Spring Data MongoDB是一个强大的Java库,它为开发人员提供了一种简单的方式来访问和操作MongoDB数据库。这个库是Spring Data框架的一部分,旨在简化数据访问层的实现,尤其在使用NoSQL数据库如MongoDB时。MongoDB...

    MongoDB实验 - .docx

    MongoDB 实验报告 本实验报告旨在详细介绍 MongoDB 的安装、配置和基本操作步骤,本报告基于 CentOS 7 系统,通过一步一步的截图和文字说明,帮助读者快速掌握 MongoDB 的使用。 一、安装 MongoDB 首先,我们需要...

    MongoDB之conf配置文件详解

    MongoDB之conf配置文件详解 MongoDB的配置文件是服务器的核心组件之一,它控制着MongoDB服务器的各种设置和行为。在本文中,我们将详细介绍MongoDB的配置文件的各个部分,并解释每个设置的作用和意义。 一、数据库...

    mongodb c#驱动最新驱动mongodb.driver.dll 版本2.12.0-beta1

    MongoDB 是一个流行的开源、基于分布式文件存储的数据库系统,主要设计用于处理大量数据的分布式环境。C# 驱动是 MongoDB 提供的一种客户端库,允许 .NET 开发者与 MongoDB 数据库进行交互。标题提到的是 MongoDB 的...

    mongodb.dll 下载.zip

    MongoDB是一个开源、分布式、高性能的NoSQL数据库,以其灵活性、可扩展性和高可用性而闻名。`mongodb.dll`是MongoDB数据库系统在Windows平台上运行所必需的一个动态链接库(DLL)文件,它包含了MongoDB客户端和...

    geoserver发布mongodb矢量数据地图服务.docx

    Geoserver发布MongoDB矢量数据地图服务 Geoserver是一款功能强大且开源的地理信息系统(GIS)服务器,能够实现空间数据的存储、处理和发布。MongoDB是一款NoSQL数据库,能够存储大量的矢量数据。本文将介绍如何使用...

    MongoDB应用设计模式

    资源名称:MongoDB应用设计模式内容简介:无论是在构建社交媒体网站,还是在开发一个仅在内部使用的企业应用程序,《MongoDB应用设计模式》展示了MongoDB需要解决的商业问题之间的连接。你将学到如何把MongoDB设计...

    MongoDB(mongodb-org-server_5.0.4_amd64.deb)

    MongoDB Community Server(mongodb-org-server_5.0.4_amd64.deb)适用于适用于Debian10 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是...

    MongoDB4.2.21 Linux版本安装包

    MongoDB是一款高性能、无模式的分布式文档型数据库,被广泛应用于大数据分析、内容管理系统、物联网(IoT)、实时应用程序和地理位置数据存储等场景。在Linux环境下安装MongoDB 4.2.21版本,是许多系统管理员和开发者...

    mongodb安装包和compass

    MongoDB是一款开源、分布式、高性能的NoSQL数据库,它不使用传统的表格和列式结构来存储数据,而是采用键值对、文档、集合和图形数据模型。这种设计使得MongoDB在处理非结构化和半结构化数据时表现出色,特别适合大...

    MongoDB Community(mongodb-linux-aarch64-ubuntu1804-5.0.8.tgz)

    MongoDB Community Server(mongodb-linux-aarch64-ubuntu1804-5.0.8.tgz)适用于Ubuntu 18.04 Arm芯片, MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决...

    mongodb数据库jar包

    MongoDB是一个流行的开源、分布式文档型数据库,设计用于处理大量数据并提供高可用性和高性能。在Java应用程序中,为了与MongoDB进行交互,我们需要使用Java MongoDB驱动程序。这个压缩包包含的就是Java连接MongoDB...

    MongoDB(mongodb-src-r5.0.4.tar.gz)

    MongoDB Community Server(mongodb-src-r5.0.4.tar.gz)源代码 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非...

    MongoDB c#驱动 dll

    MongoDB是一种流行的开源、分布式文档型数据库,以其灵活性、高性能和可伸缩性而闻名。在C#开发环境中,MongoDB提供了专门的C#驱动程序,使得开发者能够方便地与MongoDB进行交互。本篇文章将深入探讨MongoDB的C#驱动...

    Mongodb for Ubuntu 18.04 ARM 64

    MongoDB 是一个流行的开源文档型数据库,被广泛用于存储、管理和检索非结构化或半结构化数据。在本文中,我们将深入探讨如何在基于ARM架构的Ubuntu 18.04系统上安装和使用MongoDB。 一、ARM架构与Ubuntu 18.04 ARM...

    MongoDB Days 2015 深圳 PPT 共享

    MongoDB是一种分布式文档数据库,以其灵活性、高性能和可伸缩性而闻名,尤其适用于处理大量半结构化和非结构化数据。MongoDB Day 2015 深圳活动显然是一个专门针对MongoDB技术的研讨会或会议,旨在深入探讨和分享...

    mongodb Windows7 64位

    MongoDB是一款开源、高性能、无模式的文档型数据库,它在现代应用程序开发中扮演着重要的角色,特别是在处理大量非结构化数据时。针对"mongodb Windows7 64位"这个主题,我们将深入探讨MongoDB在Windows 7 64位操作...

Global site tag (gtag.js) - Google Analytics