SlideShare uma empresa Scribd logo
1 de 39
MongoDB 技术分享
主讲:胡创健
分享目录
1.MongoDB 简介
2.MongoDB 版本对比
3.MongoDB 性能测试
4.MongoDB 特点
5.MongoDB 命令行与 C# 驱动操作对照
6.MongoDB 的架构
--1.Master-Slave Replication
--2.Replica Sets 集群方案
7. 部署方法
8. 设置集群查看状态命令
9.MongoDB 适用场合
10.MongoDB 不适用场合
11. linux 下 mongodb 的安装
12.MongoDB 技巧汇总
MongoDB 简介
memcached sqlserver s
iis
iis
Mongo 是一个高性能,开源,无模式的文档型数据
库 ( 采用文件内存映射机制 ) ,它在许多场景下可用
于替代传统的关系型数据库或键 / 值存储方
式。 Mongo 使用 C++ 开发。
MongoDB 版本对比
Mongo 当前稳定版是 1.8.2( 见附件 mongodb.rar)
比前一版本 1.4 做了很多改进 ( 使用 C# 驱动
MongoDB.Driver.dll 和 MongoDB.Bson.dll( 见附件
C# 驱动类库 .rar)):
# 改进和提高了并发性能。
# Mongodb 存储文件申请磁盘空间的方式做了改进。
# 增加了 $or 等查询操作符。
# Replication 的同步方面做了改进。
select 方面 , 性能提升显著,合计有 83% 性能提高
update 方面有 75% 的性能提高
MongoDB 性能测试
Mongo 测试数据
( suse11-64bit 、 xeon3.6*2 、 4G DDR333 、 scsi73G*2 无 raid 的机器)
1 、 insert 九百万条简单数据( 3 个字段):平均值大约在
24000/s (最高 2.8W ,最低 2.1W );同时,插入第一个一百万和
第九个一百万效率没有明显差异,数据文件体积大概在 3.8G ,比较
大;
2 、 select 一万条数据(有索引): 57~61ms ,一千条大概在 6ms
左右,非常稳定;
数据量约 2 千万,数据库 300G 的情况下,读写 2000rps , CPU 等
系统消耗是相当的低
MongoDB 特点
高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
* 面向集合存储,易存储对象类型的数据。
* 模式自由 ( 没有行,列,关系等概念 ) 。
* 支持动态查询 , 拥有与 sqlserver 相似的查询功能 。
* 支持完全索引,包含内部对象。
* 支持查询。
* 支持复制和故障恢复。
* 使用高效的二进制数据存储,包括大型对象(如视频等)。
* 自动处理碎片,以支持云计算层次的扩展性
* 支持 C# , Python , PHP , Ruby , Java , C , Javascript , Perl 及
C++ 语言的驱动程序,社区中也提供了对 Erlang 及 .NET 等平台的驱动程
序。
* 文件存储格式为 BSON (一种 JSON 的扩展)
* 可通过网络访问
模式自由
MongoDB 是面向文档的数据库,而不是关系型数据库。
1 、面向文档的方式可以将文档对象或者数组内嵌进来,用
一条记录就可以表示非常复杂的层次关系——适合面向对
象语言的开发。
2 、文档 与 关系型数据库对比:从关系数据库的范式的概念
来说,嵌套是明显的反范式设计。范式设计的好处是消除
了依赖,但是增加了关联,查询需要通过关联两张或者多
张表来获得所需要的全 部数据,但是更改操作是原子的
,只需要修改一个地方即可。反范式则是增加了数据冗余
来提升查询性能,但更新操作可能需要更新冗余的多处数
据,需要注意一致 性的问题。
内存映射存储引擎
MongoDB 目前支持的存储引擎为内存映射引擎。当 MongoDB 启动的时
候,会将所有的数据文件映射到内存中,然后操作系统会托管所有的
磁盘操作。这种存储引擎有以下几种特点:
* MongoDB 中关于内存管理的代码非常精简,毕竟相关的工作已经有操
作系统进行托管。
* MongoDB 服务器使用的虚拟内存将非常巨大,并将超过整个数据文件
的大小 ( 数据文件如果超过内存大小,搜索性能将会大大降低 ) 。不
用担心,操作系统会去处理这一切。
* MongoDB 无法控制数据写入磁盘的顺序,这样将导致 MongoDB 无法
实现 writeahead 日志的特性。所以,如果 MongoDB 希望提供一种
durability 的特性(这一特性可以参考关于 Cassandra 文章:
http://www.cnblogs.com/gpcuster/tag/Cassandra/ ),需要实现另外
一种存储引擎。
* 32 位系统的 MongoDB 服务器每一个 Mongod 实例只能使用 2G 的数
据文件。这是由于地址指针只能支持 32 位。
MongoDB 安装
mongod --logpath D:webrootmongodblogMongoDB.log --logappend
--dbpath D:webrootmongodbdata --directoryperdb --serviceName
MongoDB1 --port 25436 --install
注:此处是将 mongod.exe 注册为 windows 服务 ,必须先在相应目录下
建立 data 与 log 目录,否则安装时提示错误 ( 附件 mongodb.rar 为 mongodb 安装
文件 )
MongoDB 命令行操作
普通操作
1 、新建集合集:
> db.createCollection("user");
2 、插入数据:
> db.user.insert({uid:1,username:"Falcon.C",age:25});
> j = { name: "mongo"};
> db.things.save(j);
> for( var i = 1; i < 10; i++ ) db.tables.save( { x:4, j:i } );
3 、更新数据:
> db.user.update({uid:1},{$set:{age:26}}) #age=26
> db.user.update({uid:1},{$inc:{age:-1}})#age=age-1
C# 驱动操作 ( 对照命令行 )
1 、支持单条数据插入
tables.Insert(info);
tables.Save(info); (区别:先根据 BsonId 判断集合
中是否存在记录,存在就更新,否则就插入)
BsonId= 时间戳 (4b)+ 机器 (3b)+PID(2b)+ 计数器
(3b)
(BsonId 为 12 字节字符串,是文档的唯一标识,可
以自定义 )
2 、支持批量数据插入
tables2.InsertBatch(infos);
C# 驱动操作 ( 对照命令行 )
3 、支持更新数据
var query = Query.And(Query.EQ("Number", gcommentInfo.Number),
Query.EQ("IsHotting", 1));
var update = Update.Set("Id", gcommentInfo.Id)
.Set("NewsId", gcommentInfo.NewsId)
.Set("ChnId", gcommentInfo.ChnId);
var info = mongoGCommentInfos.FindOne(query);
if (info != null)
mongoGCommentInfos.Update(query, update);
MongoDB 命令行操作
普通操作
4 、查询:
4.1 遍历集
> var cursor = db.things.find();
> while (cursor.hasNext()) { print(tojson(cursor.next())); }
4.2 方法 2
> db.things.find().forEach( function(x){print(tojson(x));});
4.3 、获取结果集
> var cursor = db.things.find();
> print (tojson(cursor[4]));
> var arr = db.things.find().toArray();
> arr[5];
C# 驱动操作 ( 对照命令行 )
FindAll 用法 :
MongoDB.Driver.MongoCursor<HeadLineInfo>
mongoHeadLineInfos = new MongoHelper().GetCollection<HeadLineInfo>();
var mongoHeadLineInfoList = mongoHeadLineInfos.FindAll();
MongoDB 命令行操作
普通操作
5 、条件查询:
> db.things.find({name:"mongo"}).forEach(function(x) { print(tojson(x));});
等价于:
SQL : SELECT * FROM things WHERE name="mongo"
>db.things.find({x:4}, {j:true}).forEach(function(x) { print(tojson(x));});
等价于:
SQL : SELECT j FROM things WHERE x=4
C# 驱动操作 ( 对照命令行 )
4 、支持条件查询
( 查询操作可以用文档与企业管理器 MongodbVUE 配套使用
)
a. 日期查询:
Query.GT("SubmitTime",MongoDB.Bson.BsonDateTime.Create(DateTime.Now.AddD
ays(-25)));
对应文档查询大于某日期: { SubmitTime : { $gt : new Date(2011,5,28) } }
Query.GT() :大于某日期; Query.LT() :小于某日期; Query.ET() :等某日期;
b. 支持模糊搜索:
Query.Matches("Title", "/" + key + "/i");
对应文档: {"Title" : { "$regex" : " 基尼系数 ", "$options" : "i" }}
c. 支持 and 条件
Query.And(Query.EQ("Channel._id", BsonInt32.Create((int)type)), Query.Matches("Title",
"/" + key + "/i"));
对应文档: { "Channel._id" : 18,"Title" : { "$regex" : " 抵制 ", "$options" : "i" } }
企业管理器 MongodbVUE 监控
(安装附件 MongoDB 企业管理器 Installer-0.9.7.2.zip )
system.profile 中记录下一条耗时过长的操作。
模糊查询性能测试: query news2.Jiubang.NewsClient2.Models.Entities.NewsInfo ntoreturn:50 reslen:313
nscanned:42841
query: { $query: { Title: { $regex: " 基尼系数 ", $options: "i" } }, $explain: true } nreturned:1 215ms
Or 条件与模糊查询性能测试: query news2.Jiubang.NewsClient2.Models.Entities.NewsInfo scanAndOrder
reslen:192393 nscanned:42810 query: { $query: { $or: [ { Title: / 百度 /i }, { Keywords: / 百度 /i } ] }, $orderby:
{ UpdateTime: -1 } } nreturned:27 255ms
In 条件性能测试: query news2.$cmd ntoreturn:1 command: { count:
"Jiubang.NewsClient2.Models.Entities.HeadLineInfo", query: { ChannelType: { $in: [ 10, 74, 21 ] }, SType: 0 } }
reslen:64 139ms
ts: 操作执行时间。
info: 操作详细信息。
info.query: 查询目标 ( 数据库 . 集合 ) 。
info.ntoreturn: 客户端期望返回的文档数量。
info.nscanned: 服务器实际扫描的文档数量。
info.reslen: 查询结果字节长度。
info.nreturnned: 查询返回文档数。
millis: 操作耗时 ( 毫秒 ) 。
C# 驱动操作 ( 对照命令行 )
d. 支持对象或数组字段搜索
Query.EQ("Channel._id", MongoDB.Bson.BsonInt32.Create((int)type));
e. 支持 or 条件: Query.Or(Query.Matches("Title", "/" + key + "/i"), Query.Matches("KeyWords", "/" +
key + "/i"));
对应文档: { "$or" : [{ "Title" : { "$regex" : " 杀 ", "$options" : "i" } }, { "Keywords" : { "$regex" : " 杀 ",
"$options" : "i" } }] }
f. 支持 In 用法
Query.In("ChannelType", MongoDB.Bson.BsonArray.Create(new[] { 10, 74, 21 }));
f. 支持模糊搜索区分大小写 和 以某个字符开头匹配
^ 符号表示以 lvl 开头, I 表示区分大小写, i 表示不区分大小写
Query.And(Query.EQ("ChnId", MongoDB.Bson.BsonInt32.Create(ChnId)), Query.Matches("Lvl", new
MongoDB.Bson.BsonRegularExpression("^" + lvl, "I")));
MongoDB 操作
普通操作
6 、 sort 用法
>db.things.find({tags :'economy'}).sort({ts:-1}).limit(10);
等价于:
SQL: select * from things where 'economy' in tags order by ts DESC limit 10
7 、 findOne 用法
> var mongo = db.things.findOne({name:"mongo"});
> print(tojson(mongo));
8 、 limit 用法
db.things.find().limit(3);
C# 驱动操作 ( 对照命令行 )
g. sort 用法
query = Query.In("ChannelType", MongoDB.Bson.BsonArray.Create(new[] { 10,
74, 21 }));
var sort = SortBy.Descending(new string[] { "Number", "SubmitTime" });
HeadLineTable = HeadLineTb.Find(query).SetSortOrder(sort);
h. findOne 用法
var query = Query.EQ("_id", MongoDB.Bson.BsonString.Create(KeyId));
var info = newsinfos.FindOne(query);
MongoDB 操作
索引
>db.u_info.insert({uid:1,name:"Falcon.C",address:"Beijing"});
>db.u_info.insert({uid:2,name:"sexMan",address:"Wuhan"});
添加:
>db.u_info.ensureIndex({uid:1});
>db.u_info.ensureIndex({name:1});
删除:
>db.u_info.dropIndex("name_1")
查询索引
>db.u_info.find({name:"Falcon.C"}).explain();
查询的条件中有索引时,查询走 BtreeCursor 的索引,而没有索引时走 BasicCursor 。
C# 驱动操作 ( 对照命令行 )
g. 索引
添加索引:
var headLineInfos = new
MongoHelper().GetCollection<HeadLineInfo>();
headLineInfos.EnsureIndex(IndexKeys.Descending("NewsId"));
headLineInfos.EnsureIndex(IndexKeys.Descending(“ChannelType”,
“SubmitTime”));( 支持复合索引 )
移除索引:
headLineInfos.DropIndex(IndexKeys.Descending("IsVertical"));
h. findOne 用法
var query = Query.EQ("_id", MongoDB.Bson.BsonString.Create(KeyId));
var info = newsinfos.FindOne(query);
MongoDB 的架构
1.Master-Slave Replication
MongoDB 的架构
2.Replica Sets 集群方案
Replica Set 模式
含一个 primary ,一个 secondary ,和一
个 arbiter ( arbiter 的唯一作用是在
primary 宕机后选举新的 primary 时拥有投
票权,用以使存活节点数大于 50% ,不包
括 50% ,否则系统将整个 down 掉,以及
在票数相同的情况下用以打破选举 的平衡
,并不存储和读取数据)。
Master-Slave Replication 与 Replica Sets 集群方案比较
优点:主数据服务器或从数据服务器挂掉后,
会自动切换主数据库,不用人工干预,
稳定性比 Master-Slave Replication 高。
缺点 : 需要客户端的驱动支持,
因为客户端在与主服务器连接失败后,
会向集群的其他服务器发一条特殊的指令询问,
谁是新的主数据服务器。
集群的服务器在不做分区的前提下,分成三种,
主数据服务器,从数据服务器,选举服务器(只做投票不存储数据),
若做数据分
区还有配置服务器。
部署方法
步骤一:在三台服务器启动 mongodb 服务, Windows 和 Linux 都类似,
只是文件路径有部分差别。
指令如下: mongod --replSet car( 集群名称 ) --port 25017( 端口 ) --dbpath
E:mongodb-testdata1( 数据文件路径 )
步骤二:用 mongo 命令行工具连接 mongo 服务器,并配置集群服务,指令如下
:
config = {_id: 'car',
members: [
{_id: 0, host: '192.168.56.71:25017'},
{_id: 1, host: 192.168.56.72:25017', initialSync : {state : 1}},
{_id: 2, host: '192.168.56.73:25017', arbiterOnly : true}
设置集群查看状态命令
可以通过命令行查看集群状态,也可以通过
C# 驱动检查集群状态 ( 见附件:检查单台
服务器或主服务器 .rar)
d:webroot>e:
E:>cdToolsmongodbbin
E:Toolsmongodbbin>mongo 192.168.56.71:25017
MongoDB shell version: 1.8.2
connecting to: 192.168.56.71:25017/test
car:PRIMARY> rs.status()
{
"set" : "car",
"date" : ISODate("2011-07-11T03:48:37Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
MongoDB 功能
1. 面向集合的存储:适合存储对象及 JSON 形式的数据。
2. 动态查询: Mongo 支持丰富的查询表达式。查询指令使用 JSON 形式的标记
,可轻易查询文档中内嵌的对象及数组。
3. 完整的索引支持:包括文档内嵌对象及数组。 Mongo 的查询优化器会分析查
询表达式,并生成一个高效的查询计划。
4. 查询监视: Mongo 包含一个监视工具用于分析数据库操作的性能。
5. 复制及自动故障转移: Mongo 数据库支持服务器之间的数据复制,支持主 -
从模式及服务器之间的相互复制。复制的主要目标是提供冗余及自动故障转
移。
6. 高效的传统存储方式:支持二进制数据及大型对象(如照片或视频)
7. 自动分片以支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可
动态添加额外的机器。
MongoDB 适用场合
1. 网站数据: Mongo 非常适合实时的插入,更新与查询,并具备网站实
时数据存储所需的复制及高度伸缩性。
2. 缓存:由于性能很高, Mongo 也适合作为信息基础设施的缓存层。在
系统重启之后,由 Mongo 搭建的持久化缓存层可以避免下层的数据源
过载。
3. 大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可
能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进
行存储。
4. 高伸缩性的场景: Mongo 非常适合由数十或数百台服务器组成的数据
库。某公司经典案例: MongoDB 存储的数据量已超过 50
亿, >1.5TB
5. 用于对象及 JSON 数据的存储: Mongo 的 BSON 数据格式非常适合
MongoDB 不适用场合
1. 高度事务性的系统:例如银行或会计系统。传统的关系型数据库目
前还是更适用于需要大量原子性复杂事务的应用程序。
1. 传统的商业智能应用:针对特定问题的 BI 数据库会对产生高度优化
的查询方式。对于此类应用,数据仓库可能是更合适的选择。
1. 需要复杂 SQL 的问题
MongoDB 谁在用 ?
谁在使用 ?
Mongo 与 Mysql 语法对应
关系图
MongoDB 操作
同步复制
1 、 Master 对 Slave
[Master]
bin/mongod --dbpath=/data/db/m_data --logpath=/data/db/m_log
--logappend --port=27017 --master --auth &
[Slave]
bin/mongod --dbpath=/data/db/m_data --logpath=/data/db/m_log
--logappend --port=27017 --slave --source=192.168.100.202:27017
--auth &
MongoDB 分布式 -
Sharding( 碎片 )
MongoDB 技巧汇总
备份
./mongodump -u admin -p 123456 -d user -o user -d db -o path
还原
./mongorestore -u admin -p 123456 -d user -c user user/user/user.bson
帮助信息
db.help();
db.user.help();
linux 下 mongodb 的安装
mkdir -p /data/mongodb/data
mkdir -p /data/mongodb/logs
cd /usr/local
wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.0.0.tgz
tar zxvf mongodb-linux-x86_64-2.0.0.tgz
rm mongodb-linux-x86_64-2.0.0.tgz
mv mongodb-linux-x86_64-2.0.0/ mongodb
# 创建启动脚本
vi /usr/local/mongodb/startmongodb.sh
# 把以下内容复制
#! /bin/bash
if [ -f /data/db/mongod.lock ];then
/bin/rm -rf /data/db/mongod.lock
fi
/usr/local/mongodb/bin/mongod -dbpath=/data/mongodb/data
-logpath=/data/mongodb/logs/mongod.log --port 27017 --logappend&
# 主从设置
#/usr/local/mongodb/bin/mongod --master --fork --dbpath=/data/mongodb/data
--logpath=/data/mongodb/logs/mongod.log --logappend --port=27017 > /dev/null 2>&1 &
# 保存后启动 mongodb
小结
1 、 Mongo 是一个高性能,开源,无模式的文档型数据库 ( 采用文件内
存映射机制 ) ;
2 、当前使用的是 1.8.2 版本(安装程序见附件 mongodb.rar ) , 既可以
通过命令行操作,
也可以通过 C# 驱动操作 ( 见附件 C# 驱动类库 .rar) ;
3 、可以搭建 mongodb 集群
4 、 C# 驱动操作可以与企业管理器 MongodbVUE 配套使用,通过
MongodbVUE 的 system.Pofile 功能来监控查询效率
5 、 C# 驱动支持增删改查, orInAnd 模糊搜索等搜索条件,但不支持
join 关联搜索
6 、支持排序 findOnelimit 用法
7 、支持 C# 驱动建立查询索引
8 、支持 Window 和 linux 系统安装
谢谢大家!

Mais conteúdo relacionado

Mais procurados

iOS程序设计-数据持久化
iOS程序设计-数据持久化iOS程序设计-数据持久化
iOS程序设计-数据持久化qiyutan
 
Lucene2 4学习笔记1
Lucene2 4学习笔记1Lucene2 4学习笔记1
Lucene2 4学习笔记1yiditushe
 
基于Innodb开发的最佳实践
基于Innodb开发的最佳实践基于Innodb开发的最佳实践
基于Innodb开发的最佳实践wubx
 
MongoDB Basic
MongoDB BasicMongoDB Basic
MongoDB Basicsimplels
 
Mysql 高级优化之 逻辑处理
Mysql 高级优化之 逻辑处理Mysql 高级优化之 逻辑处理
Mysql 高级优化之 逻辑处理nigel889
 
Jdbc4 0 规范技术预研
Jdbc4 0 规范技术预研Jdbc4 0 规范技术预研
Jdbc4 0 规范技术预研lorisjand
 
我对后端优化的一点想法.pptx
我对后端优化的一点想法.pptx我对后端优化的一点想法.pptx
我对后端优化的一点想法.pptxjames tong
 
【Maclean liu技术分享】深入理解oracle中mutex的内部原理
【Maclean liu技术分享】深入理解oracle中mutex的内部原理【Maclean liu技术分享】深入理解oracle中mutex的内部原理
【Maclean liu技术分享】深入理解oracle中mutex的内部原理maclean liu
 
Mongo db introduction
Mongo db introductionMongo db introduction
Mongo db introductionDai Qifeng
 
Practical Data Analysis in R
Practical Data Analysis in RPractical Data Analysis in R
Practical Data Analysis in RChun-Ming Chang
 
几种Nosql介绍
几种Nosql介绍几种Nosql介绍
几种Nosql介绍taotao1240
 
Javascript之昨是今非
Javascript之昨是今非Javascript之昨是今非
Javascript之昨是今非Tony Deng
 
希望科技研发部变量命名及编码规范
希望科技研发部变量命名及编码规范希望科技研发部变量命名及编码规范
希望科技研发部变量命名及编码规范Hongjian Wang
 
Oracle Data Buffer Cache
Oracle Data Buffer CacheOracle Data Buffer Cache
Oracle Data Buffer CacheSky Jian
 
Mongo db部署架构之优先方案
Mongo db部署架构之优先方案Mongo db部署架构之优先方案
Mongo db部署架构之优先方案Lucien Li
 
快速了解PostgreSQL
快速了解PostgreSQL快速了解PostgreSQL
快速了解PostgreSQL正中 周
 

Mais procurados (19)

iOS程序设计-数据持久化
iOS程序设计-数据持久化iOS程序设计-数据持久化
iOS程序设计-数据持久化
 
Lucene2 4学习笔记1
Lucene2 4学习笔记1Lucene2 4学习笔记1
Lucene2 4学习笔记1
 
基于Innodb开发的最佳实践
基于Innodb开发的最佳实践基于Innodb开发的最佳实践
基于Innodb开发的最佳实践
 
MongoDB Basic
MongoDB BasicMongoDB Basic
MongoDB Basic
 
Mysql 高级优化之 逻辑处理
Mysql 高级优化之 逻辑处理Mysql 高级优化之 逻辑处理
Mysql 高级优化之 逻辑处理
 
Jdbc4 0 规范技术预研
Jdbc4 0 规范技术预研Jdbc4 0 规范技术预研
Jdbc4 0 规范技术预研
 
我对后端优化的一点想法.pptx
我对后端优化的一点想法.pptx我对后端优化的一点想法.pptx
我对后端优化的一点想法.pptx
 
【Maclean liu技术分享】深入理解oracle中mutex的内部原理
【Maclean liu技术分享】深入理解oracle中mutex的内部原理【Maclean liu技术分享】深入理解oracle中mutex的内部原理
【Maclean liu技术分享】深入理解oracle中mutex的内部原理
 
Mongo db introduction
Mongo db introductionMongo db introduction
Mongo db introduction
 
Practical Data Analysis in R
Practical Data Analysis in RPractical Data Analysis in R
Practical Data Analysis in R
 
几种Nosql介绍
几种Nosql介绍几种Nosql介绍
几种Nosql介绍
 
Zoo keeper
Zoo keeperZoo keeper
Zoo keeper
 
Ooredis
OoredisOoredis
Ooredis
 
Javascript之昨是今非
Javascript之昨是今非Javascript之昨是今非
Javascript之昨是今非
 
希望科技研发部变量命名及编码规范
希望科技研发部变量命名及编码规范希望科技研发部变量命名及编码规范
希望科技研发部变量命名及编码规范
 
Oracle Data Buffer Cache
Oracle Data Buffer CacheOracle Data Buffer Cache
Oracle Data Buffer Cache
 
Qwrap jss
Qwrap jssQwrap jss
Qwrap jss
 
Mongo db部署架构之优先方案
Mongo db部署架构之优先方案Mongo db部署架构之优先方案
Mongo db部署架构之优先方案
 
快速了解PostgreSQL
快速了解PostgreSQL快速了解PostgreSQL
快速了解PostgreSQL
 

Semelhante a Mongo db技术分享

Mongo db技术交流
Mongo db技术交流Mongo db技术交流
Mongo db技术交流liuts
 
MongoDB Basics and Tutorial
MongoDB Basics and TutorialMongoDB Basics and Tutorial
MongoDB Basics and TutorialHo Kim
 
Nosql七种武器之长生剑 mongodb的使用介绍
Nosql七种武器之长生剑 mongodb的使用介绍Nosql七种武器之长生剑 mongodb的使用介绍
Nosql七种武器之长生剑 mongodb的使用介绍yczealot
 
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发leneli
 
中心教员J2 Ee面试题
中心教员J2 Ee面试题中心教员J2 Ee面试题
中心教员J2 Ee面试题yiditushe
 
Google protocol buffers简析
Google protocol buffers简析Google protocol buffers简析
Google protocol buffers简析wavefly
 
Spring 2.x 中文
Spring 2.x 中文Spring 2.x 中文
Spring 2.x 中文Guo Albert
 
面向开发的前端性能优化
面向开发的前端性能优化面向开发的前端性能优化
面向开发的前端性能优化li qiang
 
基于Lucene的站内搜索
基于Lucene的站内搜索基于Lucene的站内搜索
基于Lucene的站内搜索fulin tang
 
基于Lucene的站内搜索
基于Lucene的站内搜索基于Lucene的站内搜索
基于Lucene的站内搜索fulin tang
 
Kindeditor设计思路v2
Kindeditor设计思路v2Kindeditor设计思路v2
Kindeditor设计思路v2luolonghao
 
恶意网页分析实战
恶意网页分析实战恶意网页分析实战
恶意网页分析实战Huang Toby
 
Mysql遇到的一些问题
Mysql遇到的一些问题Mysql遇到的一些问题
Mysql遇到的一些问题wang tongchao
 
Web Caching Architecture and Design
Web Caching Architecture and DesignWeb Caching Architecture and Design
Web Caching Architecture and DesignHo Kim
 
Kind editor设计思路
Kind editor设计思路Kind editor设计思路
Kind editor设计思路taobao.com
 
Mongo简介
Mongo简介Mongo简介
Mongo简介wuda0112
 
Sql Server 高级技巧系列之三整体优化
Sql Server 高级技巧系列之三整体优化Sql Server 高级技巧系列之三整体优化
Sql Server 高级技巧系列之三整体优化向 翔
 
Introduction to CodeIgniter
Introduction to CodeIgniterIntroduction to CodeIgniter
Introduction to CodeIgniterChun-Kai Wang
 
Node.js开发体验
Node.js开发体验Node.js开发体验
Node.js开发体验QLeelulu
 

Semelhante a Mongo db技术分享 (20)

Mongo db技术交流
Mongo db技术交流Mongo db技术交流
Mongo db技术交流
 
MongoDB Basics and Tutorial
MongoDB Basics and TutorialMongoDB Basics and Tutorial
MongoDB Basics and Tutorial
 
Nosql七种武器之长生剑 mongodb的使用介绍
Nosql七种武器之长生剑 mongodb的使用介绍Nosql七种武器之长生剑 mongodb的使用介绍
Nosql七种武器之长生剑 mongodb的使用介绍
 
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发
 
中心教员J2 Ee面试题
中心教员J2 Ee面试题中心教员J2 Ee面试题
中心教员J2 Ee面试题
 
Google protocol buffers简析
Google protocol buffers简析Google protocol buffers简析
Google protocol buffers简析
 
Mvc
MvcMvc
Mvc
 
Spring 2.x 中文
Spring 2.x 中文Spring 2.x 中文
Spring 2.x 中文
 
面向开发的前端性能优化
面向开发的前端性能优化面向开发的前端性能优化
面向开发的前端性能优化
 
基于Lucene的站内搜索
基于Lucene的站内搜索基于Lucene的站内搜索
基于Lucene的站内搜索
 
基于Lucene的站内搜索
基于Lucene的站内搜索基于Lucene的站内搜索
基于Lucene的站内搜索
 
Kindeditor设计思路v2
Kindeditor设计思路v2Kindeditor设计思路v2
Kindeditor设计思路v2
 
恶意网页分析实战
恶意网页分析实战恶意网页分析实战
恶意网页分析实战
 
Mysql遇到的一些问题
Mysql遇到的一些问题Mysql遇到的一些问题
Mysql遇到的一些问题
 
Web Caching Architecture and Design
Web Caching Architecture and DesignWeb Caching Architecture and Design
Web Caching Architecture and Design
 
Kind editor设计思路
Kind editor设计思路Kind editor设计思路
Kind editor设计思路
 
Mongo简介
Mongo简介Mongo简介
Mongo简介
 
Sql Server 高级技巧系列之三整体优化
Sql Server 高级技巧系列之三整体优化Sql Server 高级技巧系列之三整体优化
Sql Server 高级技巧系列之三整体优化
 
Introduction to CodeIgniter
Introduction to CodeIgniterIntroduction to CodeIgniter
Introduction to CodeIgniter
 
Node.js开发体验
Node.js开发体验Node.js开发体验
Node.js开发体验
 

Mongo db技术分享

  • 2. 分享目录 1.MongoDB 简介 2.MongoDB 版本对比 3.MongoDB 性能测试 4.MongoDB 特点 5.MongoDB 命令行与 C# 驱动操作对照 6.MongoDB 的架构 --1.Master-Slave Replication --2.Replica Sets 集群方案 7. 部署方法 8. 设置集群查看状态命令 9.MongoDB 适用场合 10.MongoDB 不适用场合 11. linux 下 mongodb 的安装 12.MongoDB 技巧汇总
  • 3. MongoDB 简介 memcached sqlserver s iis iis Mongo 是一个高性能,开源,无模式的文档型数据 库 ( 采用文件内存映射机制 ) ,它在许多场景下可用 于替代传统的关系型数据库或键 / 值存储方 式。 Mongo 使用 C++ 开发。
  • 4. MongoDB 版本对比 Mongo 当前稳定版是 1.8.2( 见附件 mongodb.rar) 比前一版本 1.4 做了很多改进 ( 使用 C# 驱动 MongoDB.Driver.dll 和 MongoDB.Bson.dll( 见附件 C# 驱动类库 .rar)): # 改进和提高了并发性能。 # Mongodb 存储文件申请磁盘空间的方式做了改进。 # 增加了 $or 等查询操作符。 # Replication 的同步方面做了改进。 select 方面 , 性能提升显著,合计有 83% 性能提高 update 方面有 75% 的性能提高
  • 5. MongoDB 性能测试 Mongo 测试数据 ( suse11-64bit 、 xeon3.6*2 、 4G DDR333 、 scsi73G*2 无 raid 的机器) 1 、 insert 九百万条简单数据( 3 个字段):平均值大约在 24000/s (最高 2.8W ,最低 2.1W );同时,插入第一个一百万和 第九个一百万效率没有明显差异,数据文件体积大概在 3.8G ,比较 大; 2 、 select 一万条数据(有索引): 57~61ms ,一千条大概在 6ms 左右,非常稳定; 数据量约 2 千万,数据库 300G 的情况下,读写 2000rps , CPU 等 系统消耗是相当的低
  • 6. MongoDB 特点 高性能、易部署、易使用,存储数据非常方便。主要功能特性有: * 面向集合存储,易存储对象类型的数据。 * 模式自由 ( 没有行,列,关系等概念 ) 。 * 支持动态查询 , 拥有与 sqlserver 相似的查询功能 。 * 支持完全索引,包含内部对象。 * 支持查询。 * 支持复制和故障恢复。 * 使用高效的二进制数据存储,包括大型对象(如视频等)。 * 自动处理碎片,以支持云计算层次的扩展性 * 支持 C# , Python , PHP , Ruby , Java , C , Javascript , Perl 及 C++ 语言的驱动程序,社区中也提供了对 Erlang 及 .NET 等平台的驱动程 序。 * 文件存储格式为 BSON (一种 JSON 的扩展) * 可通过网络访问
  • 7. 模式自由 MongoDB 是面向文档的数据库,而不是关系型数据库。 1 、面向文档的方式可以将文档对象或者数组内嵌进来,用 一条记录就可以表示非常复杂的层次关系——适合面向对 象语言的开发。 2 、文档 与 关系型数据库对比:从关系数据库的范式的概念 来说,嵌套是明显的反范式设计。范式设计的好处是消除 了依赖,但是增加了关联,查询需要通过关联两张或者多 张表来获得所需要的全 部数据,但是更改操作是原子的 ,只需要修改一个地方即可。反范式则是增加了数据冗余 来提升查询性能,但更新操作可能需要更新冗余的多处数 据,需要注意一致 性的问题。
  • 8. 内存映射存储引擎 MongoDB 目前支持的存储引擎为内存映射引擎。当 MongoDB 启动的时 候,会将所有的数据文件映射到内存中,然后操作系统会托管所有的 磁盘操作。这种存储引擎有以下几种特点: * MongoDB 中关于内存管理的代码非常精简,毕竟相关的工作已经有操 作系统进行托管。 * MongoDB 服务器使用的虚拟内存将非常巨大,并将超过整个数据文件 的大小 ( 数据文件如果超过内存大小,搜索性能将会大大降低 ) 。不 用担心,操作系统会去处理这一切。 * MongoDB 无法控制数据写入磁盘的顺序,这样将导致 MongoDB 无法 实现 writeahead 日志的特性。所以,如果 MongoDB 希望提供一种 durability 的特性(这一特性可以参考关于 Cassandra 文章: http://www.cnblogs.com/gpcuster/tag/Cassandra/ ),需要实现另外 一种存储引擎。 * 32 位系统的 MongoDB 服务器每一个 Mongod 实例只能使用 2G 的数 据文件。这是由于地址指针只能支持 32 位。
  • 9. MongoDB 安装 mongod --logpath D:webrootmongodblogMongoDB.log --logappend --dbpath D:webrootmongodbdata --directoryperdb --serviceName MongoDB1 --port 25436 --install 注:此处是将 mongod.exe 注册为 windows 服务 ,必须先在相应目录下 建立 data 与 log 目录,否则安装时提示错误 ( 附件 mongodb.rar 为 mongodb 安装 文件 )
  • 10. MongoDB 命令行操作 普通操作 1 、新建集合集: > db.createCollection("user"); 2 、插入数据: > db.user.insert({uid:1,username:"Falcon.C",age:25}); > j = { name: "mongo"}; > db.things.save(j); > for( var i = 1; i < 10; i++ ) db.tables.save( { x:4, j:i } ); 3 、更新数据: > db.user.update({uid:1},{$set:{age:26}}) #age=26 > db.user.update({uid:1},{$inc:{age:-1}})#age=age-1
  • 11. C# 驱动操作 ( 对照命令行 ) 1 、支持单条数据插入 tables.Insert(info); tables.Save(info); (区别:先根据 BsonId 判断集合 中是否存在记录,存在就更新,否则就插入) BsonId= 时间戳 (4b)+ 机器 (3b)+PID(2b)+ 计数器 (3b) (BsonId 为 12 字节字符串,是文档的唯一标识,可 以自定义 ) 2 、支持批量数据插入 tables2.InsertBatch(infos);
  • 12. C# 驱动操作 ( 对照命令行 ) 3 、支持更新数据 var query = Query.And(Query.EQ("Number", gcommentInfo.Number), Query.EQ("IsHotting", 1)); var update = Update.Set("Id", gcommentInfo.Id) .Set("NewsId", gcommentInfo.NewsId) .Set("ChnId", gcommentInfo.ChnId); var info = mongoGCommentInfos.FindOne(query); if (info != null) mongoGCommentInfos.Update(query, update);
  • 13. MongoDB 命令行操作 普通操作 4 、查询: 4.1 遍历集 > var cursor = db.things.find(); > while (cursor.hasNext()) { print(tojson(cursor.next())); } 4.2 方法 2 > db.things.find().forEach( function(x){print(tojson(x));}); 4.3 、获取结果集 > var cursor = db.things.find(); > print (tojson(cursor[4])); > var arr = db.things.find().toArray(); > arr[5];
  • 14. C# 驱动操作 ( 对照命令行 ) FindAll 用法 : MongoDB.Driver.MongoCursor<HeadLineInfo> mongoHeadLineInfos = new MongoHelper().GetCollection<HeadLineInfo>(); var mongoHeadLineInfoList = mongoHeadLineInfos.FindAll();
  • 15. MongoDB 命令行操作 普通操作 5 、条件查询: > db.things.find({name:"mongo"}).forEach(function(x) { print(tojson(x));}); 等价于: SQL : SELECT * FROM things WHERE name="mongo" >db.things.find({x:4}, {j:true}).forEach(function(x) { print(tojson(x));}); 等价于: SQL : SELECT j FROM things WHERE x=4
  • 16. C# 驱动操作 ( 对照命令行 ) 4 、支持条件查询 ( 查询操作可以用文档与企业管理器 MongodbVUE 配套使用 ) a. 日期查询: Query.GT("SubmitTime",MongoDB.Bson.BsonDateTime.Create(DateTime.Now.AddD ays(-25))); 对应文档查询大于某日期: { SubmitTime : { $gt : new Date(2011,5,28) } } Query.GT() :大于某日期; Query.LT() :小于某日期; Query.ET() :等某日期; b. 支持模糊搜索: Query.Matches("Title", "/" + key + "/i"); 对应文档: {"Title" : { "$regex" : " 基尼系数 ", "$options" : "i" }} c. 支持 and 条件 Query.And(Query.EQ("Channel._id", BsonInt32.Create((int)type)), Query.Matches("Title", "/" + key + "/i")); 对应文档: { "Channel._id" : 18,"Title" : { "$regex" : " 抵制 ", "$options" : "i" } }
  • 17. 企业管理器 MongodbVUE 监控 (安装附件 MongoDB 企业管理器 Installer-0.9.7.2.zip ) system.profile 中记录下一条耗时过长的操作。 模糊查询性能测试: query news2.Jiubang.NewsClient2.Models.Entities.NewsInfo ntoreturn:50 reslen:313 nscanned:42841 query: { $query: { Title: { $regex: " 基尼系数 ", $options: "i" } }, $explain: true } nreturned:1 215ms Or 条件与模糊查询性能测试: query news2.Jiubang.NewsClient2.Models.Entities.NewsInfo scanAndOrder reslen:192393 nscanned:42810 query: { $query: { $or: [ { Title: / 百度 /i }, { Keywords: / 百度 /i } ] }, $orderby: { UpdateTime: -1 } } nreturned:27 255ms In 条件性能测试: query news2.$cmd ntoreturn:1 command: { count: "Jiubang.NewsClient2.Models.Entities.HeadLineInfo", query: { ChannelType: { $in: [ 10, 74, 21 ] }, SType: 0 } } reslen:64 139ms ts: 操作执行时间。 info: 操作详细信息。 info.query: 查询目标 ( 数据库 . 集合 ) 。 info.ntoreturn: 客户端期望返回的文档数量。 info.nscanned: 服务器实际扫描的文档数量。 info.reslen: 查询结果字节长度。 info.nreturnned: 查询返回文档数。 millis: 操作耗时 ( 毫秒 ) 。
  • 18. C# 驱动操作 ( 对照命令行 ) d. 支持对象或数组字段搜索 Query.EQ("Channel._id", MongoDB.Bson.BsonInt32.Create((int)type)); e. 支持 or 条件: Query.Or(Query.Matches("Title", "/" + key + "/i"), Query.Matches("KeyWords", "/" + key + "/i")); 对应文档: { "$or" : [{ "Title" : { "$regex" : " 杀 ", "$options" : "i" } }, { "Keywords" : { "$regex" : " 杀 ", "$options" : "i" } }] } f. 支持 In 用法 Query.In("ChannelType", MongoDB.Bson.BsonArray.Create(new[] { 10, 74, 21 })); f. 支持模糊搜索区分大小写 和 以某个字符开头匹配 ^ 符号表示以 lvl 开头, I 表示区分大小写, i 表示不区分大小写 Query.And(Query.EQ("ChnId", MongoDB.Bson.BsonInt32.Create(ChnId)), Query.Matches("Lvl", new MongoDB.Bson.BsonRegularExpression("^" + lvl, "I")));
  • 19. MongoDB 操作 普通操作 6 、 sort 用法 >db.things.find({tags :'economy'}).sort({ts:-1}).limit(10); 等价于: SQL: select * from things where 'economy' in tags order by ts DESC limit 10 7 、 findOne 用法 > var mongo = db.things.findOne({name:"mongo"}); > print(tojson(mongo)); 8 、 limit 用法 db.things.find().limit(3);
  • 20. C# 驱动操作 ( 对照命令行 ) g. sort 用法 query = Query.In("ChannelType", MongoDB.Bson.BsonArray.Create(new[] { 10, 74, 21 })); var sort = SortBy.Descending(new string[] { "Number", "SubmitTime" }); HeadLineTable = HeadLineTb.Find(query).SetSortOrder(sort); h. findOne 用法 var query = Query.EQ("_id", MongoDB.Bson.BsonString.Create(KeyId)); var info = newsinfos.FindOne(query);
  • 22. C# 驱动操作 ( 对照命令行 ) g. 索引 添加索引: var headLineInfos = new MongoHelper().GetCollection<HeadLineInfo>(); headLineInfos.EnsureIndex(IndexKeys.Descending("NewsId")); headLineInfos.EnsureIndex(IndexKeys.Descending(“ChannelType”, “SubmitTime”));( 支持复合索引 ) 移除索引: headLineInfos.DropIndex(IndexKeys.Descending("IsVertical")); h. findOne 用法 var query = Query.EQ("_id", MongoDB.Bson.BsonString.Create(KeyId)); var info = newsinfos.FindOne(query);
  • 25. Replica Set 模式 含一个 primary ,一个 secondary ,和一 个 arbiter ( arbiter 的唯一作用是在 primary 宕机后选举新的 primary 时拥有投 票权,用以使存活节点数大于 50% ,不包 括 50% ,否则系统将整个 down 掉,以及 在票数相同的情况下用以打破选举 的平衡 ,并不存储和读取数据)。
  • 26. Master-Slave Replication 与 Replica Sets 集群方案比较 优点:主数据服务器或从数据服务器挂掉后, 会自动切换主数据库,不用人工干预, 稳定性比 Master-Slave Replication 高。 缺点 : 需要客户端的驱动支持, 因为客户端在与主服务器连接失败后, 会向集群的其他服务器发一条特殊的指令询问, 谁是新的主数据服务器。 集群的服务器在不做分区的前提下,分成三种, 主数据服务器,从数据服务器,选举服务器(只做投票不存储数据), 若做数据分 区还有配置服务器。
  • 27. 部署方法 步骤一:在三台服务器启动 mongodb 服务, Windows 和 Linux 都类似, 只是文件路径有部分差别。 指令如下: mongod --replSet car( 集群名称 ) --port 25017( 端口 ) --dbpath E:mongodb-testdata1( 数据文件路径 ) 步骤二:用 mongo 命令行工具连接 mongo 服务器,并配置集群服务,指令如下 : config = {_id: 'car', members: [ {_id: 0, host: '192.168.56.71:25017'}, {_id: 1, host: 192.168.56.72:25017', initialSync : {state : 1}}, {_id: 2, host: '192.168.56.73:25017', arbiterOnly : true}
  • 28. 设置集群查看状态命令 可以通过命令行查看集群状态,也可以通过 C# 驱动检查集群状态 ( 见附件:检查单台 服务器或主服务器 .rar) d:webroot>e: E:>cdToolsmongodbbin E:Toolsmongodbbin>mongo 192.168.56.71:25017 MongoDB shell version: 1.8.2 connecting to: 192.168.56.71:25017/test car:PRIMARY> rs.status() { "set" : "car", "date" : ISODate("2011-07-11T03:48:37Z"), "myState" : 1, "members" : [ { "_id" : 0,
  • 29. MongoDB 功能 1. 面向集合的存储:适合存储对象及 JSON 形式的数据。 2. 动态查询: Mongo 支持丰富的查询表达式。查询指令使用 JSON 形式的标记 ,可轻易查询文档中内嵌的对象及数组。 3. 完整的索引支持:包括文档内嵌对象及数组。 Mongo 的查询优化器会分析查 询表达式,并生成一个高效的查询计划。 4. 查询监视: Mongo 包含一个监视工具用于分析数据库操作的性能。 5. 复制及自动故障转移: Mongo 数据库支持服务器之间的数据复制,支持主 - 从模式及服务器之间的相互复制。复制的主要目标是提供冗余及自动故障转 移。 6. 高效的传统存储方式:支持二进制数据及大型对象(如照片或视频) 7. 自动分片以支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可 动态添加额外的机器。
  • 30. MongoDB 适用场合 1. 网站数据: Mongo 非常适合实时的插入,更新与查询,并具备网站实 时数据存储所需的复制及高度伸缩性。 2. 缓存:由于性能很高, Mongo 也适合作为信息基础设施的缓存层。在 系统重启之后,由 Mongo 搭建的持久化缓存层可以避免下层的数据源 过载。 3. 大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可 能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进 行存储。 4. 高伸缩性的场景: Mongo 非常适合由数十或数百台服务器组成的数据 库。某公司经典案例: MongoDB 存储的数据量已超过 50 亿, >1.5TB 5. 用于对象及 JSON 数据的存储: Mongo 的 BSON 数据格式非常适合
  • 31. MongoDB 不适用场合 1. 高度事务性的系统:例如银行或会计系统。传统的关系型数据库目 前还是更适用于需要大量原子性复杂事务的应用程序。 1. 传统的商业智能应用:针对特定问题的 BI 数据库会对产生高度优化 的查询方式。对于此类应用,数据仓库可能是更合适的选择。 1. 需要复杂 SQL 的问题
  • 33. Mongo 与 Mysql 语法对应 关系图
  • 34. MongoDB 操作 同步复制 1 、 Master 对 Slave [Master] bin/mongod --dbpath=/data/db/m_data --logpath=/data/db/m_log --logappend --port=27017 --master --auth & [Slave] bin/mongod --dbpath=/data/db/m_data --logpath=/data/db/m_log --logappend --port=27017 --slave --source=192.168.100.202:27017 --auth &
  • 36. MongoDB 技巧汇总 备份 ./mongodump -u admin -p 123456 -d user -o user -d db -o path 还原 ./mongorestore -u admin -p 123456 -d user -c user user/user/user.bson 帮助信息 db.help(); db.user.help();
  • 37. linux 下 mongodb 的安装 mkdir -p /data/mongodb/data mkdir -p /data/mongodb/logs cd /usr/local wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.0.0.tgz tar zxvf mongodb-linux-x86_64-2.0.0.tgz rm mongodb-linux-x86_64-2.0.0.tgz mv mongodb-linux-x86_64-2.0.0/ mongodb # 创建启动脚本 vi /usr/local/mongodb/startmongodb.sh # 把以下内容复制 #! /bin/bash if [ -f /data/db/mongod.lock ];then /bin/rm -rf /data/db/mongod.lock fi /usr/local/mongodb/bin/mongod -dbpath=/data/mongodb/data -logpath=/data/mongodb/logs/mongod.log --port 27017 --logappend& # 主从设置 #/usr/local/mongodb/bin/mongod --master --fork --dbpath=/data/mongodb/data --logpath=/data/mongodb/logs/mongod.log --logappend --port=27017 > /dev/null 2>&1 & # 保存后启动 mongodb
  • 38. 小结 1 、 Mongo 是一个高性能,开源,无模式的文档型数据库 ( 采用文件内 存映射机制 ) ; 2 、当前使用的是 1.8.2 版本(安装程序见附件 mongodb.rar ) , 既可以 通过命令行操作, 也可以通过 C# 驱动操作 ( 见附件 C# 驱动类库 .rar) ; 3 、可以搭建 mongodb 集群 4 、 C# 驱动操作可以与企业管理器 MongodbVUE 配套使用,通过 MongodbVUE 的 system.Pofile 功能来监控查询效率 5 、 C# 驱动支持增删改查, orInAnd 模糊搜索等搜索条件,但不支持 join 关联搜索 6 、支持排序 findOnelimit 用法 7 、支持 C# 驱动建立查询索引 8 、支持 Window 和 linux 系统安装