mongod没有后台执行,在终端连接非正常断开后,再次执行mongod报错,如下所示: [root@localhost mongodb]# ./bin/mongod ./bin/mongod --help for help and startup options Thu Nov 17 22:42:49 Thu Nov 17 22:42:49 warning: 32-bit servers don't have journaling enabled by default. Please use --journal if you want durability. Thu Nov 17 22:42:49 Thu Nov 17 22:42:49 [initandlisten] MongoDB starting : pid=3257 port=27017 dbpath=/data/db/ 32-bit host=localhost Thu Nov 17 [...]
Browsing the archives for the MongoDB tag
在前面的文章“mongodb 查询的语法”里,我介绍了Mongodb的常用查询语法,Mongodb的update操作也有点复杂,我结合自己的使用经验,在这里介绍一下,给用mongodb的朋友看看,也方便以后自己用到的时候查阅: 注:在这篇文章及上篇文章内讲的语法介绍都是在mongodb shell环境内的,和真正运用语言编程(如java,php等)使用时,在使用方法上会有一些差别,但语法(如查询条件,$in,$inc等)是一样的。 本文是参考官方文档来介绍的,之所以有官方文档还要在这介绍,一方面是就当翻译,毕竟每次要用时去看英文文档比较累,第二是官方文档讲解比较简单,有时光看官方文档不好理解,我在实际操作的情况下可以做些补充。
在上文中,我们了解了教你如何利用MySQL学习MongoDB之SQL语法,本文中我们继续我们的学习之旅,学习两者的授权和权限。 数据库的安全性是每一个DBA重点关注的部分,在数据库建立之后,数据的安全就显得尤为重要。 对于一个数据库管理员来说,安全性就意味着他必须保证那些具有特殊数据访问权限的用户能够登录到数据库服务器,并且能够访问数据以及对数据库对象实施各种权限范围内的操作;同时,DBA还要防止所有的非授权用户的非法操作。 1、MySQL授权和权限 MySQL中有两种级别的权限:管理和用户。所有权限都可分别使用 GRANT 和 REVOKE 语句授予和收回。可以授予用户create、select、update、delete、insert、execute、index 等权限,也可授予alter、drop和shutdown等系统权限。根用户root在默认情况下具有所有权限。
先把官方文档的地址贴上来,所有的内容都来自这里:http://www.mongodb.org/display/DOCS/Security+and+Authentication 最近项目需要mongodb,简单试了下,一直都没找到安全验证的机制,在linux下很简单就用mongo命令登进去了,也没有指定用户名和密码,也没有host和port,直接就进去了。当时还感觉蛮方便的,但是事后想想,完全没有安全机制和验证的,还是有点不放心啊。后来仔细看了下文档,原来还是有的,只是不太好找而已。 官方文档的说法是:目前mongodb的安全机制还是比较简陋的,主要是表现在权限方面,一个用户只要被授权了,那么他就直接拥有了全部的读写权限。mongodb也可以创建只读用户,只有读取的权限。
下面PPT和视频的作者是MongoDB的开发工程师Jared Rosoff,他从下面几个方面对MongoDB的几个优化点进行了讲解和描述。这些优化实际上也适用于很多其它的数据库。 1.查询优化 确认你的查询是否充分利用到了索引,用explain命令查看一下查询执行的情况,添加必要的索引,避免扫表操作。 2.搞清你的热数据大小 可能你的数据集非常大,但是这并不那么重要,重要的是你的热数据集有多大,你经常访问的数据有多大(包括经常访问的数据和所有索引数据)。使用MongoDB,你最好保证你的热数据在你机器的内存大小之下,保证内存能容纳所有热数据。
PHP代码: function get_autoincre_id($name, $db){ $update = array('$inc'=>array("id"=>1)); $query = array('table_name' => $name); $command = array( 'findandmodify'=>'autoincre_system', 'update'=>$update, 'query'=>$query, 'new'=>true, 'upsert'=>true ); $id = $db->command($command); return $id['value']['id']; } 其中上面的table_name可以用来区别多个表,这样可以灵活实现单独的几个表的自增ID值. $conn = new Mongo(); $db = $conn->cms; news_max_id = get_autoincre_id('tbl_news'); //从1开始 soft_max_id = get_autoincre_id('tbl_soft'); //从1开始 现在就可以直接在写入新记录的时候使用这个id值了. 其具体实现方式主要是利用MongoDB中findAndModify命令,
前段时间有个朋友问我,分布式主键生成策略在我们这边是怎么实现的,当时我给的答案是sequence,当然这在不高并发的情况下是没有任何问题,实际上,我们的主键生成是可控的,但如果是在分布式高并发的情况下,那肯定是有问题的。 突然想起mongodb的objectid,记得以前看过文档,objectid是一种轻量型的,不同的机器都能用全局唯一的同种方法轻量的生成它,而不是采用传统的自增的主键策略,因为在多台服务器上同步自动增加主键既费力又费时,不得不佩服,mongodb从开始设计就被定义为分布式数据库。 下面深入一点来翻翻这个Objectid的底细,在mongodb集合中的每个document中都必须有一个"_id"建,这个键的值可以是任何类型的,在默认的情况下是个Objectid对象。 当我们让一个collection中插入一条不带_id的记录,系统会自动地生成一个_id的key > db.t_test.insert({"name":"cyz"}) > db.t_test.findOne({"name":"cyz"}) { "_id" : ObjectId("4df2dcec2cdcd20936a8b817"), "name" : "cyz" } 可以发现这里多出一个Objectid类型的_id,当然了,这个_id是系统默认生成的,你也可以为其指定一个值,不过在同一collections中该值必须是唯一的
redis 1.无法发挥多处理器的作用,只能用一个cpu来处理 2.暂时没有windows下的php客户端 dll或者so文件. mongodb 1.在32位处理器下,文件总大小不能超过2G,而对于64位的处理器则无任何限制
* MongoDB vs Redis vs Tokyo Tyrant 准备对MongoDB, Redis以及Tokyo Tyrant的读写做一个简单的测试,为了进行相对公平的测试,需要了解他们背后的实现机制,下面是一些比较: 存储实现的比较: * 内存文件映像(Memory-File Mapping) Redis, MongoDB * 文件 + Cache Tokyo Tyrant * 内存: Redis, Tokyo Tyrant Key/Value索引形式: * B+ Tree : MongoDB, Tokyo Tyrant * Hash Table: Redis, Tokyo Tyrant * Fixed Length: Tokyo Tyrant 从上面的比较可以看出,Redis和MongoDB是基于系统内存映像文件,数据能命中在内存的时候读写操作性能应该是非常强的,当然,反过来,如果数据十分分散不能在内存命中,那么内存页的切换开销将是非常可怕的,MongoDB和Redis数据文件不同的是将数据存放在多个文件中,每当上一个存满的时候就会创建新的数据空间文件。鉴于MongoDB 是主要比较对象,而其采用B+Tree进行存储,故TT也使用B+Tree引擎进行比较。
Mongo资料分享.ppt 认识MongoDB.ppt MongoDB技术交流.ppt SQL-to-MongoDB.pdf QCon北京2011大会之:MongoDB开发应用实践 NoSQL应用场景及Cassandra架构分析 Windows下MongoDB管理工具(启用和服务) mongoDB 入门指南、示例 NoSQl存储模型 Mongo与Mysql语法对应关系图 数据库 表 行 写入 查询 MongoDb database Collection Document insert into blog.users values(“user1”,”23))=========== > use blogswitched to db blog> u = { name:"user1", age:23 } > db.users.insert(u) 主要用到的查询函数式 find() 和 findOne(),前者返回一个迭代器 cursor,后者返回单个文档。 > db.users.find({name:"user1"}){ "_id" : ObjectId("4c4528a0b55f2224d447e4b0"), "name" : "user1", "age" : 21, [...]