- 浏览: 564977 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (618)
- java (109)
- Java web (43)
- javascript (52)
- js (15)
- 闭包 (2)
- maven (8)
- 杂 (28)
- python (47)
- linux (51)
- git (18)
- (1)
- mysql (31)
- 管理 (1)
- redis (6)
- 操作系统 (12)
- 网络 (13)
- mongo (1)
- nginx (17)
- web (8)
- ffmpeg (1)
- python安装包 (0)
- php (49)
- imagemagic (1)
- eclipse (21)
- django (4)
- 学习 (1)
- 书籍 (1)
- uml (3)
- emacs (19)
- svn (2)
- netty (9)
- joomla (1)
- css (1)
- 推送 (2)
- android (6)
- memcached (2)
- docker、 (0)
- docker (7)
- go (1)
- resin (1)
- groovy (1)
- spring (1)
最新评论
-
chokee:
...
Spring3 MVC 深入研究 -
googleyufei:
很有用, 我现在打算学学Python. 这些资料的很及时.
python的几个实用网站(转的) -
hujingwei1001:
太好了找的就是它
easy explore -
xiangtui:
例子举得不错。。。学习了
java callback -
幻影桃花源:
太好了,謝謝
Spring3 MVC 深入研究
第 1 页:
MongoDB Coming
第 2 页:大纲
大纲
简介
Why Mongo
Mongo 特性
Mongo 用法
Mongo 架构
MysqlMongo
Mongo java
Java DSL
第 3 页:简介
简介
MongoDB 不是在实验室设计出来的。利用自己开发大型,高可用性和健壮性系统的经验,我们开发了MongoDB 。我们并不是从零开始,而是发现 哪些地方有问题,然后尝试解决它。所以在我眼中,MongoDB 让你从使用MySQL 的基于关系的数据模型转变为基于文档的模型,从而获得如快速的嵌入式 文档,易管理,使用无模式数据库进行敏捷开发,易于横向扩展和伸缩(因为join 不再重要)等大量特性。使用关系型数据时有很多东西工作的很好,比如索 引,动态查询和动态更新等,这些在MongoDB 中也没怎么变化。比如,在MongoDB 里设计索引应该和你在MySQL 或Oracle 里一样,你有选择 在一个内嵌的域上建索引的能力。
– 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 , java 是String
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-slave ,replica 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
MysqlMongo
Mysql 分表
Mysql 分库
Mysql schema
Mysql master-slave 主从切换
迁移方法:用jackson mapper 转json ,DB 查询成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),
// 组函数 使用PropertyCriteria 或CriteriaValue 作为查询条件
// (当作使用CriteriaValue 时,带的值为函数返回值的keyname ,PropertyCriteria 的keyname 为propname_functionname )
max(CriteriaType.groupFunction),
min(CriteriaType.groupFunction),
/**
* 暂时不支持,可以用sum 除以count 代替
*/
avg(CriteriaType.groupFunction),
sum(CriteriaType.groupFunction),
count(CriteriaType.groupFunction),
// 多列组函数 使用PropertyCriteria 或CriteriaValue 作为查询条件
// 类似groupFunction ,但是prop 的值是用逗号多个字段名称的string ,CriteriaValue 的值也是返回值key 的逗号拼接
/**
* 取最大值,并带出最大值时的其他属性
*/
maxRow(CriteriaType.multiGroupFunction),
/**
* 取最小值,并带出当最小值时的其他属性
*/
minRow(CriteriaType.multiGroupFunction),
;
public final CriteriaType type;
private Criteria(CriteriaType type) {
this.type = type;
}
}
发表评论
-
java的InputStream和OutputStream的理解【转】
2015-11-09 18:10 654原文地址:http://www.cnblogs.com/spr ... -
【JSP】让HTML和JSP页面不缓存的方法
2015-10-14 10:16 487原文地址:http://blog.csdn.net/juebl ... -
jsp去掉浏览器缓存
2015-10-14 09:21 629原文地址:http://bbs.csdn.net/topics ... -
Spring定时任务的几种实现
2015-09-17 18:02 392原文地址:http://gong1208.iteye.com/ ... -
Java 8 简明教程
2015-08-31 17:43 356原文地址:http://www.iteye.com/magaz ... -
Java 8 简明教程
2015-08-28 15:30 564原文地址:http://www.iteye.com/magaz ... -
Spring 3.0 注解注入详解
2015-08-20 12:01 518原文地址:http://developer.51cto.com ... -
Apache所有项目介绍
2015-08-20 11:47 960原文地址:http://haisha.iteye.com/bl ... -
jdk5.0新特性介绍
2015-08-04 18:08 467原文地址:http://blog.sina.com.cn/s/ ... -
Apache Log4j配置说明
2015-05-18 15:59 428原文地址:http://zhangjunh ... -
ubuntu 14.04 下通过apt-get 安装jdk
2015-04-09 16:42 712原文地址:http://segmentfault.com/a/ ... -
【原创】Eclipse Class Decompiler——Java反编译插件
2015-04-01 15:00 612原文地址:http://www.blogj ... -
jvisualvm远程监控Tomcat
2015-03-06 10:19 719原文地址:http://ihuangweiwei.iteye. ... -
Java 并发核心编程
2015-01-08 18:07 621原文地址:http://www.cnblogs.com/see ... -
log4j日志文件乱码问题的解决方法
2015-01-06 18:11 827原文地址:http://blog.csdn.net/inkfi ... -
SHA1与MD5
2014-12-22 15:31 618原文地址:http://blog.csdn.net/fogle ... -
征服 Redis + Jedis
2014-12-19 13:51 399原文地址:http://snowolf.iteye.com/b ... -
Java连接redis的使用示例
2014-12-19 12:08 1079原文地址:http://blog.csdn.net/wgw33 ... -
java对redis的基本操作
2014-12-19 12:07 586原文地址:http://www.cnblogs.com/edi ... -
Eclipse Class Decompiler——Java反编译插件
2014-10-16 11:02 470原文地址:http://bbs.csdn. ...
相关推荐
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功能的样例数据集,特别是针对增、删、改、查(CRUD)操作的学习...
/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 MongoDB是一个强大的Java库,它为开发人员提供了一种简单的方式来访问和操作MongoDB数据库。这个库是Spring Data框架的一部分,旨在简化数据访问层的实现,尤其在使用NoSQL数据库如MongoDB时。MongoDB...
MongoDB 实验报告 本实验报告旨在详细介绍 MongoDB 的安装、配置和基本操作步骤,本报告基于 CentOS 7 系统,通过一步一步的截图和文字说明,帮助读者快速掌握 MongoDB 的使用。 一、安装 MongoDB 首先,我们需要...
MongoDB之conf配置文件详解 MongoDB的配置文件是服务器的核心组件之一,它控制着MongoDB服务器的各种设置和行为。在本文中,我们将详细介绍MongoDB的配置文件的各个部分,并解释每个设置的作用和意义。 一、数据库...
MongoDB 是一个流行的开源、基于分布式文件存储的数据库系统,主要设计用于处理大量数据的分布式环境。C# 驱动是 MongoDB 提供的一种客户端库,允许 .NET 开发者与 MongoDB 数据库进行交互。标题提到的是 MongoDB 的...
MongoDB是一个开源、分布式、高性能的NoSQL数据库,以其灵活性、可扩展性和高可用性而闻名。`mongodb.dll`是MongoDB数据库系统在Windows平台上运行所必需的一个动态链接库(DLL)文件,它包含了MongoDB客户端和...
Geoserver发布MongoDB矢量数据地图服务 Geoserver是一款功能强大且开源的地理信息系统(GIS)服务器,能够实现空间数据的存储、处理和发布。MongoDB是一款NoSQL数据库,能够存储大量的矢量数据。本文将介绍如何使用...
资源名称:MongoDB应用设计模式内容简介:无论是在构建社交媒体网站,还是在开发一个仅在内部使用的企业应用程序,《MongoDB应用设计模式》展示了MongoDB需要解决的商业问题之间的连接。你将学到如何把MongoDB设计...
MongoDB Community Server(mongodb-org-server_5.0.4_amd64.deb)适用于适用于Debian10 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是...
MongoDB是一款高性能、无模式的分布式文档型数据库,被广泛应用于大数据分析、内容管理系统、物联网(IoT)、实时应用程序和地理位置数据存储等场景。在Linux环境下安装MongoDB 4.2.21版本,是许多系统管理员和开发者...
MongoDB是一款开源、分布式、高性能的NoSQL数据库,它不使用传统的表格和列式结构来存储数据,而是采用键值对、文档、集合和图形数据模型。这种设计使得MongoDB在处理非结构化和半结构化数据时表现出色,特别适合大...
MongoDB Community Server(mongodb-linux-aarch64-ubuntu1804-5.0.8.tgz)适用于Ubuntu 18.04 Arm芯片, MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决...
MongoDB是一个流行的开源、分布式文档型数据库,设计用于处理大量数据并提供高可用性和高性能。在Java应用程序中,为了与MongoDB进行交互,我们需要使用Java MongoDB驱动程序。这个压缩包包含的就是Java连接MongoDB...
MongoDB Community Server(mongodb-src-r5.0.4.tar.gz)源代码 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非...
MongoDB是一种流行的开源、分布式文档型数据库,以其灵活性、高性能和可伸缩性而闻名。在C#开发环境中,MongoDB提供了专门的C#驱动程序,使得开发者能够方便地与MongoDB进行交互。本篇文章将深入探讨MongoDB的C#驱动...
MongoDB 是一个流行的开源文档型数据库,被广泛用于存储、管理和检索非结构化或半结构化数据。在本文中,我们将深入探讨如何在基于ARM架构的Ubuntu 18.04系统上安装和使用MongoDB。 一、ARM架构与Ubuntu 18.04 ARM...
MongoDB是一种分布式文档数据库,以其灵活性、高性能和可伸缩性而闻名,尤其适用于处理大量半结构化和非结构化数据。MongoDB Day 2015 深圳活动显然是一个专门针对MongoDB技术的研讨会或会议,旨在深入探讨和分享...
MongoDB是一款开源、高性能、无模式的文档型数据库,它在现代应用程序开发中扮演着重要的角色,特别是在处理大量非结构化数据时。针对"mongodb Windows7 64位"这个主题,我们将深入探讨MongoDB在Windows 7 64位操作...