用mongodb作为数据库服务器访问时非常慢?
你查看一下,如果数据文件大于系统内存,查询速度会下降几个数量级,因为mongodb是内存数据库。我以前测试过,1000万数据的时候没有索引情况下查询可能会几秒钟甚至更久。
这种情况,你最好给经常查询的项创建索引,有索引以后查询速度会非常非常非常的快。
另外一点是数据索引如果大于内存,速度也会下降很多。而且对于多条件查询,如果你查询的顺学和索引顺序不同,也不能使用索引。这个要慢慢摸索
如果你使用了replica set,这个会影响写入速度的,三个replica set,速度会降低到三分之一。
大概主要影响速度的就是这几点吧,如果你需求不是非常复杂,我以前测试mongodb速度方面优化好的情况下还是可以接受的。希望能帮到你
1 复制Mongodb到指定服务器
到mongodb官方网站http://wwwmongodborg/downloads下载mongodb,解压并将目录考到需要安装的服务器上,然后进行配置。例如:
复制代码 代码如下:
[root@SHNHDX17-165 ~]# scp -r root@1031880:/data/web/dxm/mongodb/mongodb-linux-x86_64-245 data/web/
会将mongodb目录copy到101117165服务器的 ~/data/web目录下。
2 建立数据、日志目录
进入mongodb根目录,新建一个data目录存放数据、新建一个log目录存放日志,然后在该目录下新建一个日志文件,例如命名为mongodblog。
复制代码 代码如下:
[root@SHNHDX17-165 mongodb]# mkdir data
[root@SHNHDX17-165 mongodb]# mkdir logs
[root@SHNHDX17-165 mongodb]# cd logs
[root@SHNHDX17-165 logs]# touch mongodblog
3创建配置文件
在mongodb根目录新建一个配置文件,文件名任意,例如mongodbconf,然后在配置文件中添加配置信息:
复制代码 代码如下:
port=27017 代表端口号,如果不指定则默认为 27017
dbpath=/root/data/web/mongodb/data/ 数据库路径
logpath=/root/data/web/mongodb/logs/mongodblog 日志路径
logappend=true 日志文件自动累加,而不是覆盖
4启动Mongodb服务(根据配置文件)
执行命令
复制代码 代码如下:
[root@SHNHDX17-165 mongodb]# /bin/mongod -f mongodbconf
会出现以下信息:
复制代码 代码如下:
all output going to: /root/data/web/mongodb/logs/mongodblog
5使用客户端来连接该数据库
重新开启一个终端,然后切换到mongodb目录下
复制代码 代码如下:
[root@SHNHDX17-164 ~]# cd data/web/mongodb
然后输入
复制代码 代码如下:
[root@SHNHDX17-164 mongodb]# bin/mongo localhost:27017
MongoDB shell version: 245
connecting to: localhost:27017/test
Server has startup warnings:
Fri Nov 8 13:05:59823 [initandlisten]
Fri Nov 8 13:05:59823 [initandlisten] WARNING: You are running on a NUMA machine
Fri Nov 8 13:05:59823 [initandlisten] We suggest launching mongod like this to avoid performance problems:
Fri Nov 8 13:05:59823 [initandlisten] numactl --interleave=all mongod [other options]
Fri Nov 8 13:05:59823 [initandlisten]
>
连接成功。
6配置自启动(可选)
设置开机自动启动Mongodb
复制代码 代码如下:
[root@SHNHDX17-165 ~]# echo "/root/data/web/mongodb/bin/mongod -f
/root/data/web/mongodb/mongodbconf -fork " >> /etc/rclocal
设置环境变量
复制代码 代码如下:
vi ~/bash_profile
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:/root/data/web/mongodb/bin
表标PHP已经自带了mongo功能,你就可以操作下面的代码(但是你必须有安装mongodb服务器)一、连接数据库使用下面的代码创建一个数据库链接复制代码代码如下:listDBs());//能打印出数据库数组,看看有几个数据库。>如图:上图说有一个数据库名字叫local,总大小1个字节,他是空的。看见ok表示运行成功。现在你可以使用$connection链接来操作数据库了选择数据库使用下面的代码来选择一个数据库复制代码代码如下:dbname;>这里的数据库并不一定是一个已经存在的数据库,如果所选择的数据库不存在,则会新建一个数据库,所以在选择数据库的时候,注意一定要填上正确的数据库名如果拼写错误的话,很有可能会新建一个数据库复制代码代码如下:mybiglongdbname;//做一些事情$db=$connection->mybiglongdbnme;//现在会连上一个新的数据库>获取一个集合获取一个集合跟选择数据库拥有相同的语法格式复制代码代码如下:baz;//选择数据库$collection=$db->foobar;//选择foobar集合//或者使用更简洁的方式$collection=$connection->baz->foobar;>插入一个文档多维数组是可以被储存到数据库中的基本单元一个随机的文档可能是这样复制代码代码如下:“MongoDB”,“type”=>“database”,“count”=>1,“info”=>(object)array(“x”=>203,“y”=>102),“versions”=>array(“097″,“098″,“099″));>注意:你可以嵌套数组与对象,对象与文档在mongodb中几乎是一样的,你可以使用$doc调用一个文档或对象,但是info字段总是一个对象而不是一个文档,本约束适用于所有文档使用MongoCollection::insert()插入一个文档复制代码代码如下:foo->bar;$collection->insert($doc);>mongodb的insert()、save(),区别主要是:若存在主键,insert()不做操作,而save()则更改原来的内容为新内容。存在数据:{_id:1,"name":"n1"}insert({_id:1,"name":"n2"})会提示错误save({_id:1,"name":"n2"})会把n1改为n2。使用MongoCollection::findOne()查询文档为了证明上面那段代码的数据已经插入到数据库里了,我们进行简单的findOne()操作以得到集合中的第一个文档数据,这种方法只返回一个文档数据,这种方法适用于在你的查询语句的时候只匹配一个文档或者你只关心第一条数据复制代码代码如下:findOne();var_dump($obj);>你会看到下列结果复制代码代码如下:array(5){["_id"]=>object(MongoId)#6(0){}["name"]string(7)“MongoDB”["type"]=>string(8)“database”["count"]=>int(1)["info"]=>array(2){["x"]=>int(203)["y"]=>int(102)}["versions"]array(3){[0]=>string(5)“097″[1]=>string(5)“098″[2]=>string(5)“099″}}注意_id字段自动加载了文档上,MongoDB储存元素中以_以及$开头的都是供内部使用的添加文档为了做一些更有趣的事情,我们添加简单的文档到集合中,这些文档如下复制代码代码如下:value);>我们可以使用循环相当有效的插入数据复制代码代码如下:insert(array(“i”=>$i));}>注意:我们可以插入不同的字段在同一字符集中,在这方面意味着MongoDB拥有非常自由的储存模式在一个集合中计算文档的数量现在我们插入了101个文档(我们用循环插入了100个,之前还插入了一个),我们可以使用count()来看看我们的数据是不是都被插入进去了复制代码代码如下:count();>这段代码将打印出101MongoCollection::count()也可以查询字段数据使用游标得到集合中的所有文档为了得到集合中的所有文档,我们可以使用MongoCollection::find()方法,find()方法返回一个MongoCursor对象,可以让我们重复得到查询所匹配的的文档复制代码代码如下:find();foreach($cursoras$id=>$value){echo“$id:“;var_dump($value);}>这样我们会打印出集合中的这101个文档,$id就是文档中的_id字段,$value就是文档本身为查询规定一个标准我们可以通过find()方法得到集合中的文档子集,例如,我们要查询出集合中i字段为71的文档,我们可以使用下列方法复制代码代码如下:71);$cursor=$collection->find($query);while($cursor->hasNext()){var_dump($cursor->getNext());}>我们将打印如下数据复制代码代码如下:array(2){["_id"]=>object(MongoId)#6(0){}["i"]=>int(71)["_ns"]=>“testCollection”}为查询设定一个范围我们可以通过find()创建一个查询语句以得集合中的一个子集,例如如果我们得到所有”i”>50的文档,我们可以使用如下代码复制代码代码如下:array(‘$gt'=>50));//注意'$gt'两边的单引号$cursor=$coll->find($query);while($cursor->hasNext()){var_dump($cursor->getNext());}>我们同样可以得到20array(“\$gt”=>20,“\$lte”=>30));$cursor=$coll->find($query);while($cursor->hasNext()){var_dump($cursor->getNext());}>我们非常容易漏掉$美元符号,你也可以选择你自定义的符号来代替美元符号,选择一个不会在你的建里面出现的符号例如”:”,在phpini中加上这么一句话复制代码代码如下:mongocmd=“:”那么上面的代码就可以替换成复制代码代码如下:array(“:gt”=>20,“:lte”=>30));>当然你也可以使用ini_set(“mongocmd”,“:”)的方法来改变创建一个索引MongoDB支持索引,并且可以很容易的加到一个集合中,你只要指定某个字段为索引就行了,并且还可以指定正序索引(1)与倒序索引(-1)下面的代码为I创建了索引复制代码代码如下:ensureIndex(array(“i”=>1));//在”i”上创建了一个索引$coll->ensureIndex(array(“i”=>-1,“j”=>1));//在”i”上创建了倒序索引在”j”上创建了正序索引>一个完整的简单例子这个例子展示了如何链接mongodb数据库,如何选择数据库,如何插入数据,如何查询数据,以及关闭数据库链接复制代码代码如下:comedy;$collection=$db->cartoons;//添加一个元素$obj=array("title"=>"CalvinandHobbes","author"=>"BillWatterson");$collection->insert($obj);//修改$newdata=array('$set'=>array("title"=>"CalvinandHobbes"));$collection->update(array("author"=>"caleng"),$newdata);//删除$collection->remove(array('author'=>'caleng'),array("justOne"=>true));//添加另一个元素,使用不同的格式$obj=array("title"=>"XKCD","online"=>true);$collection->insert($obj);//查询所有的集合$cursor=$collection->find();//重复显示结果foreach($cursoras$obj){echo$obj["title"]"\n";}//关闭链接$m->close();>输出结果为复制代码代码如下:CalvinandHobbesXKCD
可以有很多种方法,我就介绍两种最容易办到的方法。 前提条件就是两台机子同时开启,这样你在家里就可以连接办公室的电脑,再利用办公室的电脑查看期刊文库,查阅文献。这样说明白了吧。达到远程操控。
1开启两台机子上的3389,也就是远程控制。右键我的电脑属性--远程--把里面的两个钩钩上。3389就算是开启了。
2安装RemotelyAnywhere 这个软件。安装起来就行,很容易配置。也很直观使用。
3但是两种条件下,都必须打开虚拟主机,(如果你不会,可以叫单位的电脑管理员帮你进路由器设置虚拟主机。)也就是你单位的机子要到路由器上打开你的虚拟主机设置,指定到你的机子IP地址,这样在外面直接连接你们单位的IP就会直接定位到你的机子上面。至于如何得到外网IP地址很简单,打开hao123 的下面就有一个IP地址的查询,查询的IP就可以做为远程连接的IP了。
0条评论