mongodb for oracle dba - macleanliu mongodb for oracle dba.pdfmongodb replication vs oracle...
TRANSCRIPT
shoug.info 上海Oracle用户组
MongoDB For Oracle DBA
刘相兵 Maclean Liu
shoug.info 上海Oracle用户组
议程
• MongoDB For Oracle DBA
因为是For DBA,所以我们更侧重原理和管理层– MongoDB的历史和特点
– MongoDB与Oracle特性比较
– 学习曲线比较
– 学习方法推荐
shoug.info 上海Oracle用户组
Agenda
{ meetup: “SHOUG Meeting”,
presenters: [“Maclean Liu”],
host: “dbDao”,
location: “Oracle Shanghai Office”,
audience: “You guys”}
shoug.info 上海Oracle用户组
MongoDB的历史和特点
shoug.info 上海Oracle用户组
MongoDB历史
• MongoDB server和tools基于GUN AGPL v3.0协议
• MongoDB Drivers基于Apache License v2.0协议
• 面向文档Document-Oriented的DBMS
• 由10gen团队从2007年10月开始主导开发,2009年2月首度推出
• Almost x86/64 little endian only
shoug.info 上海Oracle用户组
MongoDB源代码
• 目前80.9%的源代码是C++
• https://github.com/mongodb/mongo
shoug.info 上海Oracle用户组
NOSQL 与RDBMS最大的区别在于,NOSQL没有固定的行列组织数据结构
shoug.info 上海Oracle用户组
MongoDB IS A HUMONGOUS
NOSQL DB
shoug.info 上海Oracle用户组
MongoDB IS A HUMONGOUS
NOSQL DB
Documents 来替代RDBMS中的行
Collections 来替代RDBMS中的表
shoug.info 上海Oracle用户组
一个Document
{
"_id" : ObjectId("5577f3b9e6c761081bbbbee1"), "url" : "http://www.dbDao.com",
"comp" : "dbDao Inc"
}
shoug.info 上海Oracle用户组
{
_id: ObjectID("1"),
username: “Maclean Liu”,
regDate: “10-10-2015”,
scores: {
math: "80",
english: "200"
}
}
文档里嵌入了文档
{_id: ObjectID("1"),username: “Maclean Liu”,regDate: “10-10-2015”,scores: {math: "80",english: "200"}Attr:[“a1”,”a2”]}
一个KEY对应一个数组
shoug.info 上海Oracle用户组
一个mongodb应用程序http://coenraets.org/blog/2012/10/nodecellar-sample-application-with-backbone-js-twitter-bootstrap-node-js-express-and-mongodb/
shoug.info 上海Oracle用户组
一个Document最大为16MB,大于16MB存放到
GridFS中{
_id: ObjectID("1"),
username: “Maclean Liu”,
regDate: “10-10-2015”,
scores: {
math: "80",
english: "200"
}
……
……
……
}
Oracle中若不考虑LONG和LOB和12c 32k varchar
那么一个row最多存放
1000*4000bytes=3906KB=3.8MB
shoug.info 上海Oracle用户组
JSON
• JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式
• Web领域大量使用
• NAME-VALUE 配对,例如:{
vehicle: “car”,
make: “Malibu”,
color: “blue” }
shoug.info 上海Oracle用户组
BSON
• 二进制的JSON,是对JSON文档的二进制编码存储格式
• BSON有JSON没有的Date和BinData
• MongoDB中document以BSON形式存放
• > db.meeting.insert({meeting:"SHOUGJune",Date:"2015-06-15"});
shoug.info 上海Oracle用户组
Collections是啥?
一个或多个Document的集合称为Collections
每一个Document的结构可以不一样
有点像TABLE,但TABLE的结构一般是固定的
shoug.info 上海Oracle用户组
MongoDB的特性
• 学习周期较短
• 动态查询语言
– 基于字段的搜索,正则表达式
– 用户定义的JAVASCRIPT函数
– 聚集,当然还有MAP/REDUCE
• 简单索引、复合索引、地理索引
• 复制集
• 基于数据分片的横向扩展能力
• 采用GridFS 来存放大文件
shoug.info 上海Oracle用户组
MongoDB不涉足的领域
• 另类ACID所以无法涉足金融、银行领域核心业务
• 无法满足复杂的结构化查询和JOIN所以无法涉足电信核心领域
shoug.info 上海Oracle用户组
MongoDB适合的领域
• ACID不十分重要的互联网(借贷或金融类不适合),互联网+发力中!!
• 日志数据和层次聚集
• CMS内容管理系统
• 实时分析系统
shoug.info 上海Oracle用户组
MongoDB与Oracle特性比较MongoDB VS ORACLE
互联网 VS 企业IT
shoug.info 上海Oracle用户组
ACID MongoDB vs Oracle
MongoDB Oracle
支持事务Transaction 不支持,但支持Two Phase Commits
严重支持!
原子性A 只支持Document级别的原子性,Document要么完整被更新,要么不被更新
事务要么完全提交,要么完全回滚
一致性C 客户端永远不会看到单个文档被修改的中间状态
读取到的状态总是一致的
隔离性I 不会读取到未被完整更新的单个Document,但会read uncommitted
不会读取到未提交的事务 read committed
持久性D 写关注write concern Commit后事务将不被故意丢失
shoug.info 上海Oracle用户组
存储引擎 MongoDB vs Oracle
MongoDB MMAP1 MongoDB WiredTiger Oracle
存储限制 NO NO NO
事务 Only two-phase commit Only two-phase commit of course
锁级别 V2.8 Collection-level V3 Document-level ROW-level
MVCC Snapshot Read NO * NO * of course
Geospatial support YES YES YES
压缩支持 NO YES YES
Replication支持 YES YES YES
自动数据分片 YES YES NO
二级索引 YES YES YES
文本搜索 YES YES YES
外键支持 NO NO YES
高可用集群 YES YES YES
MongoDB外部实现MVCC: https://github.com/igd-geo/mongomvcc
shoug.info 上海Oracle用户组
内存管理 MongoDB vs Oracle
MongoDB MMAPV1采用OS提供的mmap() VS Oracle 内核一套完整的堆内存管理模块KGH
shoug.info 上海Oracle用户组
内存管理 MongoDB vs Oracle
MongoDB MMAPV1内存参数
MongoDB WiredTiger 内存参数
Oracle 内存参数
没有参数MongoDB has no configurable cache for MMAPv1 storage engine. MongoDB uses all free memory on the system automatically by way of memory-mapped files. Operating systems use the same approach with their file system caches.
几乎只有一个参数wiredTigerCacheSizeGB:Themaximum size of the cache that WiredTiger will use for all data.
memory_max_target、memory_target、sga_max_size、sga_target、pga_aggregate_target、db_cache_size、shared_pool_size太多了…….
shoug.info 上海Oracle用户组
MongoDB Replication VS Oracle DataGuard• 易用性上 MongoDB Replication更好• 在数据保护上Oracle最严谨
shoug.info 上海Oracle用户组
MongoDB Sharding Cluster VS Oracle RAC非Exadata• Share nothing VS Share Disk• MongoDB有更好的扩展性,但当节点数目达到一定量后必须采用自动化管理• ORACLE RAC 一般为2、4、8节点,比较挑应用程序。但2、4节点的RAC一般即能承载大
型电商网站的核心业务
shoug.info 上海Oracle用户组
Oracle Group BY SELECT SELECT state, SUM(pop) AS totalPop
FROM zipcodes
GROUP BY state
HAVING totalPop >= (10*1000*1000)
VS
MongoDB Aggregatedb.zipcodes.aggregate( [
{ $group: { _id: "$state", totalPop: { $sum: "$pop" } } },
{ $match: { totalPop: { $gte: 10*1000*1000 } } }
] )
shoug.info 上海Oracle用户组
Oracle INSERT INTO SELECTInsert into zipcodes select * from dbDao.zipcodes1
VS
MongoDB INSERT INTO SELECT
db.zipcodes1.find().forEach( function(i) {
i._id = new ObjectId();
db.zipcodes.insert(i);
});
_id字段不得重复, MongoDB中无需CTAS
shoug.info 上海Oracle用户组
shoug.info 上海Oracle用户组
最佳搭档语言 MongoDB VS Oracle
MongoDB Oracle
Javascript:Node.js,mean.js,Ruby,Python,PHP
JAVA,C/C++,PRO*C,.Net
shoug.info 上海Oracle用户组
MongoDB与Oracle的学习曲线比较
shoug.info 上海Oracle用户组
Oracle学习曲线• Oracle体系架构过于复杂,入门难是学习的难点
• Oracle学习的深度可以很深
• 但Oracle学习多年后也容易陷入瓶颈MongoDB VS Oracle学习曲线比较
MongoDB学习 Oracle学习
shoug.info 上海Oracle用户组
MongoDB官方文档• MongoDB官方文档的阅读量不及 oracle concept +admin guide2个官方文
档
• http://docs.mongodb.org/manual/
shoug.info 上海Oracle用户组
MongoDB学习方法推荐
shoug.info 上海Oracle用户组
必读
• 官方手册http://docs.mongodb.org/manual/
• MongoDB Administration - MongoDB Documentation Project http://docs.mongodb.org/master/MongoDB-administration-guide.pdf
• MongoDB Documentation http://docs.mongodb.org/master/MongoDB-manual.pdf
• MongoDB Use Cases http://docs.mongodb.org/manual/MongoDB-use-cases-guide.pdf
• MongoDB CRUD Operations Introduction http://docs.mongodb.org/v2.2/MongoDB-crud-guide.pdf
• MongoDB github https://github.com/mongodb/mongo
shoug.info 上海Oracle用户组
重实践
• 由于测试时需要大量服务器,解决方案:– Docker https://registry.hub.docker.com/_/mongo/
– digitaloceanhttps://www.digitalocean.com/community/tutorials/how-to-set-up-a-scalable-mongodb-database
– Mongodblab https://mongolab.com/
shoug.info 上海Oracle用户组
MongoDB认证考试
• 参加认证考试,基于考题快速学习
• C100DBA和C100DEV是MongoDB公司的认证考试
• C100DBA: MongoDB Certified DBA Associate Exam 相当于OCA
• C100DEV: MongoDB Certified Developer Associate Exam 相当于开发的OCA
• 考试预约提纲https://university.mongodb.com/exams/C100DBA/about
• https://university.mongodb.com/exams/C100DEV/about
shoug.info 上海Oracle用户组
References:
MONGODB WORKSHOP [“KannanSankaran”, “Roman Kubiak”]
S H O U G
Let’s Leverage Oracle Together
Using, Learning & Sharing