读书人

MongoDB权威指南(六)- 高级主题

发布时间: 2012-07-27 11:03:01 作者: rapoo

MongoDB权威指南(6)- 高级主题

?

1.数据库命令

mongoDB提供了范围广泛的数据库命令,覆盖了除create,read,update,delete之外的所有功能。比如我们前边用到的getLastError命令,用来查看update时受影响的数量。

命令是如何工作的

这里有个你比较熟悉的例子:drop,如果从shell里删除一个collection,我们运行db.test.drop().实际上,在内部执行的是drop命令,跟下边用runCommand执行的操作是一样的

  • collStats: {"collStats" : collection},给出指定collection的统计信息,包括数据大小,分配的存储控件,索引大小等
  • distinct: {"distinct" : collection, "key": key, "query": query} 返回在指定的collection里符合query条件的所有key的值
  • drop: {"drop" : collection}, 删除collection的说有数据
  • dropDatabase: {"dropDatabase" : 1}, 删除当前数据库的所有数据
  • dropIndexes: {"dropIndexes" : collection, "index" : name}, 删除collection上名字为name的索引
  • findAndModify:参见第3章
  • getLastError: {"getLastError" : 1[, "w" : w[, "wtimeout" : timeout]]}, 检查此连接上最后操作的错误或状态信息,可以指定一个选项,此命令将会阻塞直到w个salves复制了最后的那个操作或者时间超时(毫秒)
  • isMaster: {"isMaster" : 1}, 检查此服务器是master还是slave
  • listCommands: {"listCommands" : 1}, 列出此服务器上所有可用命令
  • listDatabases: {"listDatabases" : 1},列出服务器上所有数据库
  • ping: {"ping" : 1},检查服务器是否正在运行,即使服务器处于锁定状体此命令也会立即返回
  • renameCollection: {"renameCollection" : a, "to" : b}, 将collection的名字从a改为b
  • repairDatabase:{"repairDatabase" : 1}, 修复并压缩当前数据库
  • serverStatus:{"serverStatus" : 1}, 获取此服务器的管理统计信息

    2.Capped Collections

    mongoDB还支持一种特殊的collection叫Capped Collections,这种collection是事先创建并且是大小固定的。固定大小就带来了一个问题,如果collection满了之后对其执行插入该如何处理。Capped Collection的工作方式像一个循环队列,如果空间用完了,那么最旧的数据会被删除掉,新数据会取代旧数据的位置。这就是说,随着新 document的插入,最旧的document会自动消亡。

    某些操作在Capped Collection上是不允许执行的。不允许执行document删除,也不允许执行会导致document移动的更新(使document变大的更新),这样就可以保证Capped Collections里的document是按照插入顺序存储的。

    特性和用例

    Capped Collection的这些特点和限制会产生有趣的特性。首先是插入很快,执行插入的时候不再需要分配空间,服务器就不用查询空闲列表,插入的 document直接放在collection的尾部。缺省情况下,也不会更新索引,所以一次插入本质上就是一次内存拷贝。另外一个特性是,按插入顺序查询很快,document是按照插入顺序存储的,只需要按它们在磁盘上的顺序遍历。最后,旧数据的自动消亡也是个有用的特性。包括了上述3个特性的 Capped Collection对某些用例特别适用,如日志,实际上Capped Collection原本就是设计来存储内部复制日志的。另外还有个好的用例,缓存小规模的document。

    创建Capped Collections

    > x = { name : 'Biology' }{ "name" : "Biology" }> db.courses.save(x)> x{ "name" : "Biology", "_id" : ObjectId("4b0552b0f0da7d1eb6f126a1") }> stu = { name : 'Joe', classes : [ new DBRef('courses', x._id) ] }// or we could write: // stu = { name : 'Joe', classes : [ {$ref:'courses',$id:x._id} ] } > db.students.save(stu)> stu{        "name" : "Joe",        "classes" : [                {                        "$ref" : "courses",                        "$id" : ObjectId("4b0552b0f0da7d1eb6f126a1")                }        ],        "_id" : ObjectId("4b0552e4f0da7d1eb6f126a2")}> stu.classes[0]{ "$ref" : "courses", "$id" : ObjectId("4b0552b0f0da7d1eb6f126a1") }> stu.classes[0].fetch(){ "_id" : ObjectId("4b0552b0f0da7d1eb6f126a1"), "name" : "Biology" }>来源:http://www.open-open.com/lib/view/open1328162079109.html

  • 读书人网 >其他数据库

    热点推荐