mongodb for c# developer

74

Upload: dianmingsong

Post on 24-Jan-2015

1.076 views

Category:

Technology


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: MongoDB for C# developer
Page 2: MongoDB for C# developer

NO sql

NO relational

NO joins

NO ORM

NO complex transactions

Page 3: MongoDB for C# developer

海量数据 高并发 高可用 复杂度 非结构化数据 需求变化

Page 4: MongoDB for C# developer
Page 5: MongoDB for C# developer

Data Model

1,2,3范式

tree、master/detail、relation…

Objects != Data

ORM

DAL

Page 6: MongoDB for C# developer

Key-value

Memcached、Redis

Graph Databases

Neo4j

Column Families

BigTable,HBase,cassandra

Document

CouchDB,mongoDB

Page 7: MongoDB for C# developer
Page 8: MongoDB for C# developer
Page 9: MongoDB for C# developer

酸 ACID

atomicity, consistency, isolation, durability

碱 BASE

Basically Available, Soft-state, Eventually Consistent

Page 10: MongoDB for C# developer

Consistency (一致性)

Availability (可用性)

Partition tolerance (分区容忍性)

一个分布式系统不可能同时满足这三个需求最多只能同时满足两个(AP/CP)

Page 11: MongoDB for C# developer
Page 12: MongoDB for C# developer

Memory is the new disk,disk is the new tap-Jim Gray

Page 13: MongoDB for C# developer
Page 14: MongoDB for C# developer
Page 15: MongoDB for C# developer

function map(fn, a){

for (i = 0; i < a.length; i++){

a[i] = fn(a[i]);

} }

(Joel on Software)

function reduce(fn, a, init){ var s = init; for (i = 0; i < a.length; i++)

s = fn( s, a[i] ); return s;

}

Page 16: MongoDB for C# developer
Page 18: MongoDB for C# developer

http://www.mongodb.org/

Page 19: MongoDB for C# developer

Document-oriented Rich, document-based queries Full Index Support Replication & High Availability Sharding GridFS Map/Reduce BSON everywhere Memory Mapped Data Files

Page 20: MongoDB for C# developer
Page 21: MongoDB for C# developer
Page 22: MongoDB for C# developer
Page 23: MongoDB for C# developer

http://try.mongodb.org/

Page 24: MongoDB for C# developer

mongod

mongodb.conf

mongo mongos mongostat mongoexport\mongoimport mongodump\mongorestore

Page 25: MongoDB for C# developer

默认数据存储路径是 /data/db, 默认端口 27017 默认 HTTP 端口 28017 日志

--logpath、--logappend、--verbose、--cpu

Page 26: MongoDB for C# developer

一个.ns文件和n个数据文件 数据文件大小2倍倍增 单数据文件最大2G

Page 27: MongoDB for C# developer
Page 28: MongoDB for C# developer

显示创建 不能删除对象

Page 29: MongoDB for C# developer

方便传输 高效 通用

http://bsonspec.org

Page 30: MongoDB for C# developer

每个BSON对象大小不能超过4MB 字段名不能以”$”开头;不能包含”.” “_id”是系统保留的字段

Page 31: MongoDB for C# developer

> help

Page 32: MongoDB for C# developer
Page 33: MongoDB for C# developer

4e2647e8 0fe07f 1260 54caf4

Timestamp + Machineid + Processid + Counter

一个对象被插入到数据库中时,如果它没有ID,会自动生成一个”_id”字段,为24位16进制数。

Page 34: MongoDB for C# developer
Page 35: MongoDB for C# developer

<, <=, >, >= $all $exists $mod $ne $in $nin $nor $or $and $size $type

Regular Expressions Embedded Object Search JavaScript Expressions Special operators Explain()

Page 36: MongoDB for C# developer
Page 37: MongoDB for C# developer
Page 38: MongoDB for C# developer

Count db.characters.find({armor:{$gt:1800}}).count()

Limit Skip () db.characters.find({armor:{$gt:1800}}).skip(10).limit(1)

Sort db.characters.find().sort({armor:-1}).limit(3)

db.characters.find().sort({$natural:-1}).

Page 39: MongoDB for C# developer

B Tree,支持geospatial index 影响写速度,占用空间 默认索引:_id 索引顺序影响是否用到索引 索引中缺少的字段为null explain()查看执行计划

Page 40: MongoDB for C# developer
Page 41: MongoDB for C# developer
Page 42: MongoDB for C# developer

索引保存在 system.indexes 索引大小 db. characters.totalIndexSize()

创建索引 db.characters.ensureIndex(key_pattern, options)

选项: unique; dropDups ; background

查看索引 db.characters.coll.getIndexes()

删除索引 db.characters.dropIndexes()

重建索引 db.characters.reIndex()

Page 43: MongoDB for C# developer
Page 44: MongoDB for C# developer

Udate(criteria, objNew, upsert, multi) Save() 支持原子操作tomic 不支持传统事务模型(rollback??)

Page 45: MongoDB for C# developer
Page 46: MongoDB for C# developer

findAndModify (<options> } )

find, modify, and return

Page 47: MongoDB for C# developer

db.colname’.remove({…})

Page 48: MongoDB for C# developer

db.eval(…);

Page 49: MongoDB for C# developer

http://localhost:28017/_commands db.runCommand( {

<commandname>: <value> [, options] } );

db.commandHelp("datasize")

Page 50: MongoDB for C# developer
Page 51: MongoDB for C# developer

Http Console

http://localhost:28017/

mongostat db.serverStatus() db.stats()、db.colname.stats() db.colname.validate() 系统监控

memory、cpu、IO

Page 52: MongoDB for C# developer

setProfilingLevel(lvl, <ms>)

0: none

1: time-based(默认100ms)

2: all

db.system.profile.find()

Page 53: MongoDB for C# developer

mongod --repair db.repairDatabase(); mongod --journal

version 1.9.2+64-bit默认开启

group commit

db.colname.validate();

Page 54: MongoDB for C# developer

Master Master/slave

arbiterOnly

Replica sets

db.printReplicationInfo()

db.printSalveReplicationInfo()

oplog(capped collection,规划大小)

Page 55: MongoDB for C# developer
Page 56: MongoDB for C# developer
Page 57: MongoDB for C# developer

Params

w: number of replicas to write to

wtimeout: time to wait for acknowledgements

fsync: flush to disk

Page 58: MongoDB for C# developer

Unique Index 空间成本 维护 failover

Page 59: MongoDB for C# developer

Single One – Many & Many - Many

Embedded document(4M的限制)

Normalized

Tree

Page 60: MongoDB for C# developer

Javascript执行性能

Page 61: MongoDB for C# developer
Page 62: MongoDB for C# developer

db.addUser

("username", "password")

db.system.users.remove

({user: username})

Page 63: MongoDB for C# developer

system.namespaces system.indexes system.profile system.users local.sources

Page 64: MongoDB for C# developer

--rest选项

Page 65: MongoDB for C# developer

备份

mongodump、mongorestore

db.copyDatabase、db.cloneDatabase

Lock, Snapshot and Unlock

admin.runCommand({fsync : 1, lock : 1})

db.$cmd.sys.unlock.findOne()

缺少传统数据库丰富的还原机制 队列

Page 66: MongoDB for C# developer

执行计划 db.colname.find({..}).expliain()

减小json数据的大小(使用较短的key) 优化索引、索引全部放入内存 优化document schema设计 db.eval() 在服务端执行某些操作 用BinData存储UUID格式的数据 36bytes->16bytes

使用连接池,修改每个连接的stack size 默认10M

预分配空间、减少内存和磁盘碎片 删除数据--不收回碎片

Page 67: MongoDB for C# developer

NoSQL注入 --auth 启动参数 --noscripting启动参数

Page 68: MongoDB for C# developer

每个链接一个线程 单线程执行Map/Reduce 一个写线程

Page 69: MongoDB for C# developer

磁盘空间 内存 维护 事务

Page 71: MongoDB for C# developer

MongoDB Deployment Strategies MongoDB开发应用实践 Optimizing MongoDB: Lessons Learned at

Localytics Chrome扩展Mongo Live MongoDB部署与运维 10 Key MongoDB Performance Indicators MongoDB Administration

Page 72: MongoDB for C# developer
Page 73: MongoDB for C# developer
Page 74: MongoDB for C# developer

Thanks文中大部分资料来源于网络