小编jlh*_*awn的帖子

在javascript shell和pymongo中的db.eval()的MongoDB性能

我需要对需要在数组中旋转一些值的文档执行更新操作.MongoDB的更新查询目前不允许你$pop,然后$push在更新同一领域.在网上搜索建议后,我认为db.eval()最适合我的使用,因为它确保了原子性,我正在执行的操作非常短,因此它不会长时间锁定数据库.

这是我正在尝试做的事情的一个例子:

db.eval(function (id, newVal) {
    doc = db.collection.findOne({_id: id});
    doc.values.shift();
    doc.values.push(newVal);
    db.collection.save(doc);
}, id, newVal);
Run Code Online (Sandbox Code Playgroud)

这完美地运作!然后我启用了mongoDB分析,看看eval()命令花了多少毫秒,我总是得到少于1毫秒的结果:

 > db.system.profile.find({op: "command"}, {"millis": 1}) 
 { "millis" : 0 }
 { "millis" : 0 }
 ...
Run Code Online (Sandbox Code Playgroud)

这对我来说是个好消息,除了我的应用程序是在python中,所以我使用pymongo客户端来执行eval()命令.(上面的数据来自mongo shell)但现在,当我eval()使用pymongo 运行相同的命令时:

conn = pymongo.Connection(mongo_server_hostname)
db = conn.my_db

db.eval("""function (id, newVal) {
    doc = db.collection.findOne({_id: id});
    doc.values.shift();
    doc.values.push(newVal);
    db.collection.save(doc);
}""", id, new_val)
Run Code Online (Sandbox Code Playgroud)

我得到了非常不同的分析结果:

> db.system.profile.find({op: "command"}, {"millis": 1}) 
{ "millis" : 13 }
{ …
Run Code Online (Sandbox Code Playgroud)

performance profiling eval mongodb pymongo

16
推荐指数
1
解决办法
3593
查看次数

Go中的静态初始化?

我目前正在研究Go Lang教程,但遇到了其中一个练习的问题:

https://tour.golang.org/methods/23

练习让我实现了一个ROT13密码.我决定使用从字节到旋转值的映射来实现密码,但我不确定初始化此映射的最佳方法.我不想使用文字初始化地图,但更喜欢通过循环遍历字母表并在循环内设置(键,值)对来编程.我还希望只能从Rot13Reader结构/对象访问该地图,并让所有实例(?)共享相同的地图(而不是每个Rot13Reader一个副本).

这是我目前正在进行的Go计划:

package main

import (
    "io"
    "os"
    "strings"
)

type rot13Reader struct {
    r io.Reader
}

var rot13Map = map[byte]byte{}

func (rotr *rot13Reader) Read(p []byte) (int, error) {
    n, err := rotr.r.Read(p)
    for i := 0; i < n; i++ {
        if sub := rot13Map[p[i]]; sub != byte(0) {
            p[i] = sub
        }
    }
    return n, err
}

func main() {
    func() {
        var uppers = []byte("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
        var lowers = []byte("abcdefghijklmnopqrstuvwxyz")

        var init = func (alphabet …
Run Code Online (Sandbox Code Playgroud)

static initializer go static-initialization

14
推荐指数
2
解决办法
1万
查看次数