Home  >  Article  >  Database  >  MongoDB 存储过程的使用以及性能调优方案

MongoDB 存储过程的使用以及性能调优方案

WBOY
WBOYOriginal
2016-06-07 16:08:081381browse

虽然MongoDB给了我们很多驱动可以用,但是都没有mongodb的shell来的方便。就比如说最近需要做的DBRef嵌套类型的数据要做CRUD如果

虽然MongoDB给了我们很多驱动可以用,,但是都没有mongodb的shell来的方便。就比如说最近需要做的DBRef嵌套类型的数据要做CRUD如果使用mog驱动的话会非常麻烦。因此我们这里来做个试验,首先给test数据库添加初始化数据添加Server-side script以及测试

mongo 添加数据

db.people.insert({"_id":"test","phone","233333"}) //输入原始数据


// 数据库修改函数
// update之后返回修改后的数据。
peopleUpdate=function(id,phone){
db.people.update({
"_id":id,
},{$set:{
phone:phone
}});
return db.people.findOne({"_id":id});
}

//添加数据库函数
 db.system.js.insert({"_id":"peopleUpdatePhone","value": peopleUpdate });
 // 修改数据库函数
 db.system.js.update({"_id":"peopleUpdatePhone"},{$set:{"value": peopleUpdate }})
 //执行数据库函数
 db.eval("peopleUpdatePhone('test','23333test')")

测试之后在mongo shell里面是ok的。

golang 调用函数并返回

package main

import (
        "linuxidc.org/v2/mgo"
        "linuxidc.org/v2/mgo/bson"
      )

func main() {
 session, err := mgo.Dial("")
 if err != nil {
    panic(err)
 }
 defer session.Close()

 session.SetMode(mgo.Monotonic, true)

 db := session.DB("test")
 var result interface{}
 db.Run(bson.M{"eval": "peopleUpdatePhone('test','new test');"},&result)
}

如上面代码所示,就可以执行修改了。
但是要注意锁的问题:eval会产生写入锁。结果你懂得。

性能测试。


我直接测试了调用main函数10000次
1.eval1.在测试中eval表现不佳,因为会锁库。
2.顺便吐槽一下mongodb的锁那真的是相当的大。
3.最后测试我每等到结果,甚至有几次修改一次要用4秒钟。(因为之前的锁没打开。)

2.runCommand1.会快很多很多
2.2w次update同一个key的操作大概是3s。


总结
1.我用的是MBP MGX82
2.虽然性能不是很好(跟MYSql还是差很多)但是以及够支持一般的应用了
3.不是MongoDB不暴力,仅仅是因为我不懂而已。

CentOS编译安装MongoDB

CentOS 编译安装 MongoDB与mongoDB的php扩展

CentOS 6 使用 yum 安装MongoDB及服务器端配置

Ubuntu 13.04下安装MongoDB2.4.3

MongoDB入门必读(概念与实战并重)

Ubunu 14.04下MongoDB的安装指南

《MongoDB 权威指南》(MongoDB: The Definitive Guide)英文文字版[PDF]

Nagios监控MongoDB分片集群服务实战

基于CentOS 6.5操作系统搭建MongoDB服务

MongoDB 的详细介绍:请点这里
MongoDB 的下载地址:请点这里

本文永久更新链接地址:

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn