package main
从事成都服务器托管,服务器租用,云主机,网页空间,国际域名空间,CDN,网络代维等服务。
import (
"fmt"
"gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson"
)
type DB struct {
Session *mgo.Session
Collection *mgo.Collection
}
type Digapp struct {
App_id string
Fetch_url string
From string //
Fetch_state bool
Fetch_priority int32 //
Create_time int64 //
Invalid bool // + app is access now ?
}
func main() {
db := new(DB)
if err := db.DBInit(); err != nil {
fmt.Println("初始化数据库失败!错误为:" + err.Error())
return
}
defer db.Close()
var digapp Digapp
//{"fetch_priority": 5, "
安装文件:官方网站
选择对应系统的文件下载。
一、解压缩文件。
将压缩包解压,在D盘创建文件夹MongoDB,将压缩包中所有的.exe文件拷到D:MongoDB文件夹中。
二、建立工作目录。
1、建立数据存放目录 D:\mongodb\data
2、建立日志文件 D:\mongodb\log\mongodb.log
三、设置系统变量。为了方便从控制台中管理mongodb,不用每次都进入到D:MongoDB中。
我的电脑--属性--高级--环境变量--系统变量中的path,加上;D:\MongoDB ,注意前面加上分号。如下图:
三、启动mongdb服务。
进入控制台中,输入mongod.exe --dbpath=D:\MongoDB\data 。如下图:
这样服务就启动了,正常情况下会显示如下:
在浏览器中输入。会出现
You are trying to access MongoDB on the native driver port. For http diagnostic access, add 1000 to the port number
表面服务已经启动。
不要关闭当前这个控制台窗口,另起一个控制台,输入mongo.如下图:
表明已成功连接到mongdb.
四、将mongdb作为windows服务随机启动。
控制台中输入:mongod.exe --dbpath=D:\mongodb\data --logpath=D:\mongodb\logs\mongodb.log --install
正常情况下会显示
五、连接mongodb
在控制台中输入net start mongodb,会出现 “Mongo DB 服务已经启动成功”的提示。
输入mongo,就会连接到test.在我的电脑--管理--服务和应用程序中可以看到MongoDB 服务已经成功启动
六、异常处理
如果出现下图的错误:
先看服务启动没有,如果没有启动服务先启动服务,如果服务已经启动了,那有可能是上次不正常关闭mongo,导致存放数据的文件被占用了,被锁住了。只需将D:\MongoDB\data中的mongod.lock文件删除掉。重新启动服务即可。
连接是要消耗资源的,而且消耗的并不少。
内存:MongoDB为例,每个线程都要分配1MB的栈内存出来。1000个连接,1G内存就这么没了,甭管是否是活跃连接
文件句柄:每个连接都要打开一个文件句柄,当然从成本上讲,这个消耗相对内存是小了很多。但换个角度,文件句柄也被其他模块消耗着,比如WT存储引擎,就需要消耗大量的文件句柄
是否真的需要这么多的链接,一般的业务场景下请求压力在1000QPS左右,按照每个请求50ms计算,最多也就需要1000/(1000/50)==50个链接即可满足需求,并且是整个系统50个链接即可。
很多人平时没有怎么注意过链接数概念,上云后发现居然有这样的限制,心里很不舒服,可能非常不理解。这里说下常见的两种情况:
短链接:一般都是PHP环境,因为PHP的框架决定了PHP短链接的特性,并且链接数的需求一般是在1000-3000左右,具体多少还要根据业务部署的PHP数量来计算。并且MongoDB开源版本在短链接Auth处理上并不优雅,会消耗非常多的CPU资源,3000链接即可跑满24Core的CPU。PHP大拿Facebook也有同样的问题,所以他们用go语言自行开发了一套Proxy代理,来解决对MongoDB的短链接请求问题,但这毕竟带来部署成本和兼容性问题。阿里云的解决方案是从MongoDB源码优化下手,可以参考文章
长链接:比较健康合理的使用方式,但是也要正确的配置客户端,相关的参数为maxPoolSize=xx 在ConnectionURI上追加上去即可,否则默认每个客户端就是高处100来个,平白的浪费资源
链接数的上限需要综合考虑性能,稳定性,业务需求。多方面去考虑,缺一不可。超低的内存,配置超高的链接数,得到的只能是OOM。
执行启动操作后,mongodb 在输出一些必要信息后不会输出任何信息,之后就等待连接的建立,当连接被建立后,就会开始打印日志信息。 你可以使用 MongoDB shell 来连接 MongoDB 服务器。你也可以使用 PHP 来连接 MongoDB。本教程我们会使用 MongoDB shell 来连接 Mongodb 服务,之后的章节我们将会介绍如何通过php 来连接MongoDB服务。 标准 URI 连接语法: mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]] mongodb:// 这是固定的格式,必须要指定。 username:password@ 可选项,如果设置,在连接数据库服务器之后,驱动都会尝试登陆这个数据库 host1 必须的指定至少一个host, host1 是这个URI唯一要填写的。它指定了要连接服务器的地址。如果要连接复制集,请指定多个主机地址。 portX 可选的指定端口,如果不填,默认为27017 /database 如果指定username:password@,连接并验证登陆指定数据库。若不指定,默认打开 test 数据库。 ?options 是连接选项。如果不使用/database,则前面需要加上/。所有连接选项都是键值对name=value,键值对之间通过或;(分号)隔开