****************** 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 中定义的,返回的是对象本身,这样就可以使用链式的方法添加数据
它的特点是高性能,易存储,存储数据非常方便,
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 中定义的,返回的是对象本身,这样就可以使用链式的方法添加数据