• mongo


    mongo有很多的orm框架,例如mongoengine/pymongo/mongoalchemy/mongokit等,这些都各有利弊,不同的框架还有不同的封装好的更便捷的插件,我写过flask用的mongo封装的

    flask-mongoengine。mongo 的具体详细操作,从下载到连接mongo再到创建库,集合,以及orm中的操作方法还有mongo服务中的操作方法,在官方文档上都是有详细解说,稍微有点点看不明白的就去单独问题搜一下其他人的博客解释,问题都不大,这里我就先不细细copy过来了。下面捡一个要紧的先记下来,这一点网上或者是官网没有针对性的说明,导致我可能是个人理解也有偏差,耽误了一些时间去排坑,这里记录一下。

    不论用哪种框架,mongo的集合类型是固定的,这里需要先提一点,我遇到的mongo集合有两种,因为是第一次接触mongo,之前都是用mysql数据库用得比较多,所以熟悉一些,再接触其他的数据库都是跟mysql在做对比,主要逻辑是大同小异的,重点就是理解他们的差异性,各自优劣势,从而在以后的开发过程中能更合理的做出选择。

    mongo的集合中我说的这两种就是capped collection以及非capped collection,他们的核心点就是,capped collection在创建之初就必须要指定集合的大小,而非capped collection则不需要。

    原因是capped collection它内部是有一套类似于队列的机制,当该集合存储数据达到峰值,这个峰值就是我们一开始创建它的时候所设定的它的大小,它就会自动删除最开始存入的数据,从而给后续要存入的数据预留出来空间,就类似于队列的先进先出原则,这就是它的核心点。与此同时,capped collection是不支持删除集合中的部分数据的,也就是说这样的集合你创建了之后,如果想要要删除是不行的,如果要删除,只能把这个集合整个drop掉。除此之外没有其他办法。当然了,更改是可以的,不过,如果要该的话,必须要严格按照数据大小来更改,比如说要改这个集合demo的name字段的值,

    db.demo.update({'name':'poter'},{$set:{'name':'brand'}})

    这样是可以改的。但是如果这样就不行

    db.demo.update({'name':'poter'},{$set:{'name':'brandy'}})

    会报错:

    WriteResult({
        "nMatched" : 0,
        "nUpserted" : 0,
        "nModified" : 0,
        "writeError" : {
            "code" : 10003,
            "errmsg" : "Cannot change the size of a document in a capped collection: 38 != 39"
        }
    })

    这里的报错信息中,“errmsg”说的很明白,你所更改的值跟原数据值大小不一致,没错,就是差一位数,单词从4个子变成5个字,就不行。这里不仅仅是改变一个字段的大小,这条数据创建了之后,它的大小就已经是定型的了,大小是按照字节数来决定的,你不论如何更改这条数据,是改字段名也好,改字段值也好,必须保持跟原来数据的大小一致,所以轻易不要改,不然还要算着字节数,太繁琐了,还不如直接重新创建一条数据。所以感受一下吧。

    我个人感觉,可能是经验尚浅,还没有见过什么大世面,目前来看,最适合的应用场景就是做日志记录,这样比较符合它的特性,其他的还想不到什么应用场景。

    如果要创建capped collection,就指定集合大小,具体参数,不同的orm不同的语法,只要加上指定集合大小的参数,那么它创建之后就是capped collection。

    接下来说非capped collection集合类型特点,就是没有自动删除文件的牛逼功能,跟其他的数据库一样,自己对其进行增删改查操作。这里需要提醒的一点是,如果你要创建非capped collection,那么在创建的时候不要加上类似:‘capped’,‘max ducument’,‘max size’,‘size’这样的表示大小的参数值就可以了。

    简单来说就是不要指定集合大小!不要指定集合大小!不要指定集合大小!

    一旦你指定了改集合的大小,它即是capped collection类型。

    mongoengine的参数配置,全面版

    from flask import Flask
    from flask_mongoengine import MongoEngine
     
    app = Flask(__name__)
    app.config['MONGODB_SETTINGS'] = {
        'db': 'app_db',
        'host': 'localhost',
        'port': 27017,
        'username': 'appUser',
        'password': 'passwordForAppUser',
        'authentication_source': 'admin'
    }
     
    db = MongoEngine(app)

    如果涉及到权限问题就用上面这些参数,把它们都配置齐全。

    这里是数据批量导入到mongo里面的命令

    mongorestore -d tank /home/zhangy/mongodb/tank/

    mongorestore 是命令操作

    -d tank 是指定数据库,如果没有这个库则自动生成此库,比较方便

     /home/zhangy/mongodb/tank/ 是所存放的数据文件路径,就是把这个路径下的所有文件都导入到数据库中,前提是这些文件都是从数据库中导出的才可以,有固定的生成格式,不能随意来

  • 相关阅读:
    暑假集训单切赛第二场 UVA 10982 Troublemakers
    暑假集训单切赛第一场 POJ 2309 BST(找规律的题)
    暑假集训单切赛第一场 CF 191A Dynasty Puzzles
    暑假集训单切赛第一场 CF 266E More Queries to Array(线段树+二项式展开式)
    暑假集训单切赛第一场 UVA 1737 Mnemonics and Palindromes 3
    大一暑假集训第六周第一场单切赛
    POJ 1486 Sorting Slides(寻找必须边)
    【机器学习】梯度下降法的相关介绍
    Linux下使用Tmux提高终端环境下的效率
    Fedora23安装以后要做的优化配置
  • 原文地址:https://www.cnblogs.com/2012-dream/p/9216871.html
Copyright © 2020-2023  润新知