mongodb

****************** MongoDB ********
它的特点是高性能,易存储,存储数据非常方便,
1. 面向集合存储,易存储对象类型的数据
2. 模式自由
3. 支持动态查询
4. 支持完全索引,包含内部对象,MongodDB的查询优化器会分析查询表达式,并生成一个高效的查询计划
5. 支持查询
6. 支持复制和故障恢复
7. 使用高效的二进制存储,包括大型对象(视频等)
8. 自动处理碎片
9. 文件存储格式为BJSON(一种json扩展)

一些概念
一个mongod服务可以有建立多个数据库,每个数据库可以有多张表,这里的表名叫collection,每个collection可以存放多个文档(document),
每个文档都以BSON(binary json)的形式存放于硬盘中,因此可以存储比较复杂的数据类型。
它是以单文档为单位存储的,你可以任意给一个或一批文档新增或删除字段,而不会对其它文档造成影响,这就是所谓的schema-free,
这也是文档型数据库最主要的优点。跟一般的key-value数据库不一样的是,它的value中存储了结构信息,所以你又可以像关系型数据
库那样对某些域进行读写、统计等操作。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎
可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。Mongo还可以解决海量数据的查询效率,根据官方文档,
当数据量达到50GB以上数据时,Mongo数据库访问速度是MySQL10 倍以上

BSON

BSON是Binary JSON 的简称,是一个JSON文档对象的二进制编码格式。BSON同JSON一样支持往其它文档对象和数组中再插入文档对象和数组,同时扩展了JSON的数据类型。如:BSON有Date类型和BinDate类型。

BSON被比作二进制的交换格式,如同Protocol Buffers,但BSON比它更“schema-less”,非常好的灵活性但空间占用稍微大一点。

BSON有以下三个特点:
1.  轻量级
2.  跨平台
3.  效率高


1.创建:db.a.insert({"name":"jack","age":19})
db.a.insert({"name":"luce","age":20})
         
2.查找:db.a.find()                  --全查
db.a.findOne()               --只取多个的第一个
db.a.find({"name":"jack"})   --根据条件查找
          
3.更新:db.a.update({"name":"jack"},{"age":30})
  
4.删除:db.a.remove()                --删除所有文档,集合保留
db.a.remove({"name":"jack"}) --删除复合条件的文档
db.a.drop()                  --删除集合,于此同时所有文档也删除了
 
Mongodb 有两个隐身的属性:
id:会自动生成,所以可能会造成重复数据


***************** 实际应用 **************
*** 创建数据库连接
Mongo m = new Mongo( "localhost" , 27017 );
DB logDB = m.getDB( "logDB" );


**** or 使用MongoClient 创建连接 ***
Builder builder = new MongoClientOptions.builder();
//最多尝试重连一天
builder.maxAutoConnectRetryTime(3600*24*1000);
//自动重新连接
builder.autoConnectRetray(true);
//数据库读写数据的timeout
builder.socketTimeOut(30000)
//与数据库连接的timeout
builder.connectTimeOut(15000)

MongoClient options = builder.build();
MongoClient mogo = new MongoClient(new ServerAddress("127.0.1","27017"),options);

DB logDB = mogo.getDB("logDB");

ps:
java 驱动开发:
java mongodb 驱动程序是线程安全的,如果在web服务器环境中使用,那么应该创建一个mongoclient实例全局使用
mongodclient内部维护了数据库的连接池(默认连接池是10),每次DB请求(查询,插入等)。

*** 初始化Collection
public Map<String,DBCollection> logCollections = new HashMap<String,DBCollection>()

Set<String> logcolls = logBD.getCollectionNames();
for(String name : logcolls){
DBCollection collection  = logDB.getCollectionName(name);
//capped 固定大小的集合,当集合达到达到指定大小时,新数据会覆盖老数据
DBObject prop = new BasicObject("capped",true);
collection.apply(prop);
//创建索引
collection.createIndex(new BasicObject("fusId"),id)
collection.setWriteConnection(WriteConnection.SAFE);
collections.put(name,collection);
}

*** 添加记录
BasicDBObject record = new BasicDBObejct();
record.append("fsuId","123456");
record.append("fsuInfo",AppDetail.toString());
versionCollection.insert(record);


*** 查询记录
DBObject where = new BasicDBObejct();
where.put("fsuId","123456");
DBCursor cursor = versinCollection.find(where);
while(cursor.hasNext()){
DBObject object = cusor.next();
String cotent = record.get("fsuInfo").toString();
//如果是json 则解析json,如果是xml格式则解析xml
}

*** 更新记录 
BasicDBObject record = new BasicDBObejct();
record.append("fsuId","123456");
record.append("fsuInfo",AppDetail.toString());

DBObject where = new BasicDBObejct();
where.put("fsuId","123456");
versionCollection.update(where,record);

*** 删除操作
BasicDBObject where = new BasicDBObejct();
where.append("fsuId","123456");
versionCollection.remove(where);

ps:
BasicDBObject 中的append,put方法区别
1.put 方法是BSONObject接口定义的,返回的是value值
2.append 方法是BasicDBObject 中定义的,返回的是对象本身,这样就可以使用链式的方法添加数据






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值