May 25, 2012
MySQL数据库的IO操作
"\u003cp\u003e\u003cstrong\u003e导读:\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e 淘宝丁奇分享的PPT:MySQL数据库的IO操作,详细分享了四块的内容,并且告诉大家如何调整MySQL数据库IO操作相关的参数,给出了详细的选择策略,现替其整理成文章分享与此。\u003c/p\u003e\n\u003cp\u003ePPT内容提纲:\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e1.MySQL的文件及简介\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e2.数据访问流程\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e3.文件访问模式\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e4.影响io行为的一些参数和选择策略\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e1.MySQL的文件及简介\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.mysqlops.com/wp-content/uploads/2012/05/mysqlops-io-1.png\"\u003e\u003cimg src=\"http://www.mysqlops.com/wp-content/uploads/2012/05/mysqlops-io-1.png\" alt=\"\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e2.数据访问流程\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e一个简单的查询 select * from t where id\u0026gt;=( select id from t where k1=100 limit 100000,1) limit 2;\u003c/p\u003e\n\u003cp\u003e表结构:\u003c/p\u003e\n\u003cp\u003eCREATE TABLE \u003ccode\u003et\u003c/code\u003e (\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eid\u003c/code\u003e int(11) NOT NULL,\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ek1\u003c/code\u003e int(11) DEFAULT NULL,\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003edata\u003c/code\u003e char(100) DEFAULT NULL,\u003c/p\u003e\n\u003cp\u003ePRIMARY KEY (\u003ccode\u003eid\u003c/code\u003e),\u003c/p\u003e\n\u003cp\u003eKEY \u003ccode\u003ek1\u003c/code\u003e (\u003ccode\u003ek1\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003e) ENGINE=InnoDB DEFAULT CHARSET=gbk;\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e3.数据访问流程\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.mysqlops.com/wp-content/uploads/2012/05/mysqlops-io-2.png\"\u003e\u003cimg src=\"http://www.mysqlops.com/wp-content/uploads/2012/05/mysqlops-io-2.png\" alt=\"\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e4.数据访问流程\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e一个简单的更新 insert into t values(1, …\u003c/p\u003e"
May 25, 2012
从PHP客户端看MongoDB通信协议
"\u003cp\u003eMongoDB的 PHP 客户端有一个 MongoCursor 类,它是用于获取一次查询结果集的句柄(或者叫游标),这个简单的取数据操作,内部实现其实不是那么简单。本文就通过对 MongoCursor 类一些操作进行分析,向大家揭开 MongoDB 客户端服务器通信的一些内部细节。\u003c/p\u003e\n\u003ch3 id=\"getnext与网络请求\"\u003egetNext与网络请求\u003c/h3\u003e\n\u003cp\u003e通常来说,每一次find操作都会返回一个MongoCursor对象,在这个对象上调用getNext方法,就能够获得一条结果数据。循环调用getNext方法就能获取多条数据。下面我们就来看看其内部取数据的具体逻辑。\u003c/p\u003e\n\u003cp\u003e首先我们用最简单的方法来生成一个MongoCursor对象:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$m = new Mongo();\n$collection = $m-\u0026gt;demoDb-\u0026gt;demoCollection;\n$cursor = $collection-\u0026gt;find();\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e当我们调用 find 方法的时候,会生成一个 MongoCursor 对象,而这时候只是生成一个内存中的对象而已,并不会把我们的 find 查询发送到服务端,因为在生成 MongoCursor 对象后,我们还可能对 …\u003c/p\u003e"
May 12, 2012
MongoDB 客户端 MongoVue
"\u003cp\u003e今天在同事那里看到了一个很不错的MongoDB的客户端工具MongoVue,地址是\u003ca href=\"http://www.mongovue.com/\" title=\"http://www.mongovue.com/\"\u003ehttp://www.mongovue.com/\u003c/a\u003e。做的不错,1.0版本的开始收费了,费用也不贵才35$。真正需要的同学可以掏点钱买个吧,也算是支持这个工具,如果只是学习研究用的话我这里还有一个0.9.7版本,虽然比起1.0版来说有些bug,平常使用也够了,需要的同学可以单独联系我。\u003c/p\u003e\n\u003cp\u003e1.0版之后超过15天后功能受限。可以通过删除以下注册表项来解除限制:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[HKEY_CURRENT_USER\\Software\\Classes\\CLSID{B1159E65-821C3-21C5-CE21-34A484D54444}\\4FF78130]\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e把这个项下的值全删掉就可以了。\u003c/p\u003e\n\u003cp\u003e下面上图给大家感受下强大的MongoVue,可以提高你使用MongoDB的幸福指数好几十点,上图是王道:\u003c/p\u003e\n\u003cp\u003e1、配置连接\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://images.cnblogs.com/cnblogs_com/shanyou/201105/201105202156379291.png\"\u003e\u003cimg src=\"http://images.cnblogs.com/cnblogs_com/shanyou/201105/201105202156425175.png\" alt=\"image\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e2、试下新建一个名为AccessLog的Collection :\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://images.cnblogs.com/cnblogs_com/shanyou/201105/201105202156459404.png\"\u003e\u003cimg src=\"http://images.cnblogs.com/cnblogs_com/shanyou/201105/20110520215648644.png\" alt=\"image\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://images.cnblogs.com/cnblogs_com/shanyou/201105/201105202156514807.png\"\u003e\u003cimg src=\"http://images.cnblogs.com/cnblogs_com/shanyou/201105/201105202156569851.png\" alt=\"image\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e3、插入一个Document\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://images.cnblogs.com/cnblogs_com/shanyou/201105/201105202157028144.png\"\u003e\u003cimg src=\"http://images.cnblogs.com/cnblogs_com/shanyou/201105/201105202157041435.png\" alt=\"image\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e4、查看我们插入的数据,数据可以通过多种方式展示(树形、表格、文本)\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://images.cnblogs.com/cnblogs_com/shanyou/201105/201105202157089643.png\"\u003e\u003cimg src=\"http://images.cnblogs.com/cnblogs_com/shanyou/201105/201105202157113806.png\" alt=\"image\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e上面我们都是通过图形界面的操作的吧,下面有一个窗口 …\u003c/p\u003e"
May 11, 2012
ps和pstree
"\u003cp\u003eps和pstree是用于系统分析的基本命令。ps有3中不同风格的命令选项,UNIX风格、BSD风格和GNU风格。这里我们只介绍UNIX风格选项。\u003c/p\u003e\n\u003cp\u003eps命令可以显示当前运行的进程列表。top命令也可以显示进程信息,但ps可以提供更加详细的内容。使用相应选项可以影响进程显示的数量。ps -A命令可以列出所有进程及其相应的进程ID(PID),当我们使用如pmap或renice等工具时会用到此PID。\u003c/p\u003e\n\u003cp\u003e当系统运行java应用时,ps -A产生的输出结果很容易填满整个显示区域,这导致很难得到所有运行中进程的完整视图。在这种情况下,pstree命令就派上用场了,它使用树状显示所有运行中的进程并合并所有的子进程(例如java线程),pstree命令有助于确认原始进程。还有另一个ps变种pgrep也非常有用。\u003c/p\u003e\n\u003cp\u003e例子2-4:ps输出示例\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.haohtml.com/wp-content/uploads/2012/05/ps_-a.jpg\"\u003e\u003cimg src=\"http://blog.haohtml.com/wp-content/uploads/2012/05/ps_-a.jpg\" alt=\"\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e下面我们来了解一些常用的选项\u003c/p\u003e\n\u003cp\u003e-e :所有进程。等同于-A\u003c/p\u003e\n\u003cp\u003e-l :显示长格式\u003c/p\u003e\n\u003cp\u003e-F :附加全格式\u003c/p\u003e\n\u003cp\u003e-H :显示进程的层次结构\u003c/p\u003e\n\u003cp\u003e-L :显示线程,可能出现LWP和NLWP栏位\u003c/p\u003e\n\u003cp\u003e-m :在进程后显示线程\u003c/p\u003e\n\u003cp\u003e下面的命令演示输出进程的详细信息:\u003c/p\u003e\n\u003cp\u003eps -elFL\u003c/p\u003e\n\u003cp\u003e例子2-5: …\u003c/p\u003e"
May 10, 2012
时间即财富:创业者浪费精力的八个错误
"\u003cp\u003e导读:本文作者Jeff Miller是美食网页应用Punchfork的创始人,同时也是DuckDuckGo、Ginzametrics、Art.sy、DataMinr以及Forkly的投资人。作者通过对自己创业初期一些错误选择进行盘点,告诉读者在创业初期应该学会选择,因为在创业初期,时间是最宝贵的财富。\u003c/p\u003e\n\u003cp\u003e创业的选择有两种,一是白手起家做创新品牌,另外就是已经有发展基础的品牌去做大,这两者之间最大的不同就是把握时机。每天都会有成百上千的机会摆在你的面前,你会选择哪一个?把握住其中的一个机会就意味着你将放弃其它那成百上千的诱惑。所以,创业最关键的技能就是把握时机。\u003c/p\u003e\n\u003cp\u003e作为一个成熟的企业,在发展的过程中都会面临各种时机,这些时机有的会让公司在付出较少的前提下获得更多利益,有的会促使公司有较大的发展。这些时机会由很多事情决定,比如有足够的活跃用户会向你进行反馈市场信息、发现某个榜样可以让你参考学习、发现了能够促进达成目标的优化方案等等。\u003c/p\u003e\n\u003cp\u003e回顾我自己创业的这六个月,发现自己对时机的选择真的是非常糟糕的。我经常在某项工作上花费大量时间,而最后对达成目标却没有任何效果。我特别容易偏爱短期(1至2周时间) …\u003c/p\u003e"
May 10, 2012
Mongodb 与mysql 语法比较
"\u003cp\u003emongodb与mysql命令对比\u003c/p\u003e\n\u003cp\u003e传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成,MongoDB是由**数据库(database)、集合(collection)、文档对象(document)**三个层次组成。MongoDB对于关系型数据库里的表,但是集合中没有列、行和关系概念,这体现了模式自由的特点。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eMySQL\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eMongoDB\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e说明\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003emysqld\u003c/p\u003e\n\u003cp\u003emongod\u003c/p\u003e\n\u003cp\u003e服务器守护进程\u003c/p\u003e\n\u003cp\u003emysql\u003c/p\u003e\n\u003cp\u003emongo\u003c/p\u003e\n\u003cp\u003e客户端工具\u003c/p\u003e\n\u003cp\u003emysqldump\u003c/p\u003e\n\u003cp\u003emongodump\u003c/p\u003e\n\u003cp\u003e逻辑备份工具\u003c/p\u003e\n\u003cp\u003emysql\u003c/p\u003e\n\u003cp\u003emongorestore\u003c/p\u003e\n\u003cp\u003e逻辑恢复工具\u003c/p\u003e\n\u003cp\u003edb.repairDatabase()\u003c/p\u003e\n\u003cp\u003e修复数据库\u003c/p\u003e\n\u003cp\u003emysqldump\u003c/p\u003e\n\u003cp\u003emongoexport\u003c/p\u003e\n\u003cp\u003e数据导出工具\u003c/p\u003e\n\u003cp\u003esource\u003c/p\u003e\n\u003cp\u003emongoimport\u003c/p\u003e\n\u003cp\u003e数据导入工具\u003c/p\u003e\n\u003cp\u003egrant * privileges on \u003cem\u003e.\u003c/em\u003e to …\u003c/p\u003e\n\u003cp\u003eDb.addUser()\u003c/p\u003e\n\u003cp\u003eDb.auth()\u003c/p\u003e\n\u003cp\u003e新建用户并权限\u003c/p\u003e\n\u003cp\u003eshow databases\u003c/p\u003e\n\u003cp\u003eshow dbs\u003c/p\u003e\n\u003cp\u003e显示库列表\u003c/p\u003e\n\u003cp\u003eShow tables\u003c/p\u003e\n\u003cp\u003eShow collections …\u003c/p\u003e"
May 10, 2012
MongoDB数据库优化:Mongo Database Profiler
"\u003cp\u003e在MySQL中,慢查询日志是经常作为我们优化数据库的依据,那在MongoDB中是否有类似的功能呢?答案是肯定的,那就是Mongo Database Profiler.不仅有,而且还有一些比MySQL的Slow Query Log更详细的信息。它就是我们这篇文章的主题。\u003c/p\u003e\n\u003cp\u003e** 开启 Profiling 功能**\u003c/p\u003e\n\u003cp\u003e有两种方式可以控制 Profiling 的开关和级别,第一种是直接在启动参数里直接进行设置。\u003c/p\u003e\n\u003cp\u003e启动MongoDB时加上–profile=级别 即可。\u003c/p\u003e\n\u003cp\u003e也可以在客户端调用db.setProfilingLevel(级别) 命令来实时配置。可以通过db.getProfilingLevel()命令来获取当前的Profile级别。\n \u0026gt; db.setProfilingLevel(2);\u003c/p\u003e\n\u003cp\u003e{“was” : 0 , “ok” : 1}\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e db.getProfilingLevel()\n 上面斜体的级别可以取0,1,2 三个值,他们表示的意义如下:\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e0 – 不开启\u003c/p\u003e\n\u003cp\u003e1 – 记录慢命令 (默认为\u0026gt;100ms)\u003c/p\u003e\n\u003cp\u003e2 – 记录所有命令\u003c/p\u003e\n\u003cp\u003eProfile 记录在级别1时会记录慢命令,那么这 …\u003c/p\u003e"
May 8, 2012
优化MySQL语句的十个建议
"\u003cp\u003e(译者注:作者借这个题目反讽另一篇同名的文章)\u003c/p\u003e\n\u003cp\u003eJaslabs的Justin Silverton列出了\u003ca href=\"http://www.whenpenguinsattack.com/2007/04/09/10-tips-for-optimizing-mysql-queries/?2b4ffb70\"\u003e十条有关优化MySQL查询的语句\u003c/a\u003e,我不得不对此发表言论,因为这个清单非常非常糟糕。另外一个\u003ca href=\"http://immike.net/blog/2007/04/09/how-not-to-optimize-a-mysql-query/\"\u003eMike\u003c/a\u003e也同样意识到了。所以在这个博客中,我要做两件事情,第一,指出为什么这个清单很糟糕,第二,列出我的清单,希望我的比较好些。继续看吧,无畏的读者们!\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e为什么那个清单很糟糕\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e1.他的力气没使对地方\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e我们要遵循的一个准则就是如果你要优化代码时,应该先找出瓶颈在哪。然而Silverton先生的力气没有用对地方。我认为60%的优化是基于清楚理解SQL和数据库基础的。你需要知道join和子查询的区别,列索引,以及如何将数据规范化等等。另外的35%的优化是需要清楚数据库选择时的性能表现,例如COUNT(*)可能很快也可能很慢,要看你选用什么数据库引擎。还有一些其他要考虑的因素,例如数据库在什么时候不用缓存,什么时候存在硬盘上而不存在内存中,什么时候数据库创建临时表等等。剩下的5%就很少会有人碰到了,但Silverton先生恰好在这上面花了大量的时间。我从来就没用过SQL_SAMLL_RESULT。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e2.很 …\u003c/strong\u003e\u003c/p\u003e"
May 8, 2012
Mysql中出现的"MySQL Got error 139 from storage engine"的原因
"\u003cp\u003e今天再从excel里导入数据到Mysql中的时候,发现一个表里的数据总是导入失败.后来经过查找是用的INNODB表引擎的问题.而换成MYISAM表引擎的话,则不存在此问题.并试图先导入成Myisam表,然后手动修改表引擎为INNODB.结果提示"MySQL Got error 139 from storage engine"错误.经google一番发现.是由于INNODB单条记录有8K的限制,而导入的excel表里字段不到20个.内容特别的多的.\u003c/p\u003e\n\u003cp\u003e官方解释如下:\u003c/p\u003e\n\u003cp\u003eSolution:\u003c/p\u003e\n\u003cp\u003e1.divide your table into small ones. If one table contain more than 10 text colums, and the data contain is a little bit long. this error will be thrown out.\u003c/p\u003e\n\u003cp\u003e2.modify InnoDB to MyISAM.Problem description:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eDescription:\nSince upgrading MySQL from version …\u003c/code\u003e\u003c/pre\u003e"
May 7, 2012
Mongodb亿级数据量的性能测试
"\u003cp\u003e进行了一下Mongodb亿级数据量的性能测试,分别测试如下几个项目:\u003c/p\u003e\n\u003cp\u003e(所有插入都是单线程进行,所有读取都是多线程进行)\u003c/p\u003e\n\u003cp\u003e1) 普通插入性能 (插入的数据每条大约在1KB左右)\u003c/p\u003e\n\u003cp\u003e2) 批量插入性能 (使用的是官方C#客户端的InsertBatch),这个测的是批量插入性能能有多少提高\u003c/p\u003e\n\u003cp\u003e3) 安全插入功能 (确保插入成功,使用的是SafeMode.True开关),这个测的是安全插入性能会差多少\u003c/p\u003e\n\u003cp\u003e4) 查询一个索引后的数字列,返回10条记录(也就是10KB)的性能,这个测的是索引查询的性能\u003c/p\u003e\n\u003cp\u003e5) 查询两个索引后的数字列,返回10条记录(每条记录只返回20字节左右的2个小字段)的性能,这个测的是返回小数据量以及多一个查询条件对性能的影响\u003c/p\u003e\n\u003cp\u003e6) 查询一个索引后的数字列,按照另一个索引的日期字段排序(索引建立的时候是倒序,排序也是倒序),并且Skip100条记录后返回10条记录的性能,这个测的是Skip和Order对性能的影响\u003c/p\u003e\n\u003cp\u003e7) 查询100条记录(也就是100KB)的性能(没有排序,没有条件),这个测的是大数据量的查询结果对性能的影响\u003c/p\u003e\n\u003cp\u003e8) 统计随着测试的进行,总磁盘占用,索引磁盘占用以及数 …\u003c/p\u003e"
May 7, 2012
mongodb索引讲解与性能调优
"\u003cp\u003emongodb索引规则基本上与传统的关系库一样,大部分优化MySQL/Oracle/SQLite索引的技巧也适用于mongodb。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e一、 为什么用索引:\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e当查询中用到某些条件时,可以对该键建立索引,以提高查询速度。\u003c/p\u003e\n\u003cp\u003e如果数据量很多且查询多于更新时,可以用索引提高查询的速度。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e二、 索引管理:\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003ea) 查询索引:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e查询已有索引的明细:\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e查询索引很简单,比如说需要查询mailaccess数据库中的Mail collection上的索引时:\u003c/p\u003e\n\u003cp\u003emongo 进入mongo\u003c/p\u003e\n\u003cp\u003eMongoDB shell version: 1.8.1\u003c/p\u003e\n\u003cp\u003econnecting to: test\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003euse mailaccess 进入mailaccess database\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003eswitched to db mailaccess\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003edb.Mail.getIndexes() 查询索引明细\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e[\u003c/p\u003e\n\u003cp\u003e{\u003c/p\u003e\n\u003cp\u003e“name” : “_id_”,\u003c/p\u003e\n\u003cp\u003e“ns” : “mailaccess.Mail”,\u003c/p\u003e\n\u003cp\u003e“key” : { …\u003c/p\u003e"
May 7, 2012
MongoDB 索引数据类型优化,节省60%内存
"\u003cp\u003e最近trunk.ly的工程师通过mongostat发现了大量的page fault,然后通过检查发现,他们的索引已经超出内存限制了(没有\u003ca href=\"http://blog.boxedice.com/2010/12/13/mongodb-monitoring-keep-in-it-ram/\"\u003ekeep all index in RAM\u003c/a\u003e)。于是他们决定开始减小索引大小,通过测试得出了如下的数据,不同的数据类型的索引大小有2到3倍的差距。\u003c/p\u003e\n\u003cp\u003e虽然能够想像得到,但是直观的数据图可能让我们更深刻的认识到。他们的测试再一次告诉我们:给索引定一个好的数据结构是多么重要。\u003c/p\u003e\n\u003cp\u003e这是测试结果图,分别是用int、MongoDB的ObjectID、base64和md5的字符串做索引产生的索引大小:\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.haohtml.com/wp-content/uploads/2012/05/mongodb_indexes_optimize.jpeg\"\u003e\u003cimg src=\"http://blog.haohtml.com/wp-content/uploads/2012/05/mongodb_indexes_optimize.jpeg\" alt=\"\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e测试过程也非常简单,首先用下面脚本将各种不同数据结构的数据写入到不同的collection里:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e#!/usr/bin/env python\n\nimport pymongo\nimport bson\nfrom pymongo import Connection\n\ndb = connection.test_database\n\nprint(\u0026#39;ObjectID\u0026#39;)\nfor i in range(1, 1000000): …\u003c/code\u003e\u003c/pre\u003e"
May 7, 2012
mongodb的监控与性能优化
"\u003cp\u003e\u003cstrong\u003e一.mongodb的监控\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003emongostat是mongdb自带的状态检测工具,在命令行下使用。它会间隔固定时间获取mongodb的当前运行状态,并输出。如果你发现数据库突然变慢或者有其他问题的话,你第一手的操作就考虑采用mongostat来查看mongo的状态。\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"http://photo.l99.com/bigger/30/1332836385675_ii0c6z.png\" alt=\"立方图片分享\"\u003e\u003c/p\u003e\n\u003cp\u003e它的输出有以下几列:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003einserts/s 每秒插入次数\u003c/li\u003e\n\u003cli\u003equery/s 每秒查询次数\u003c/li\u003e\n\u003cli\u003eupdate/s 每秒更新次数\u003c/li\u003e\n\u003cli\u003edelete/s 每秒删除次数\u003c/li\u003e\n\u003cli\u003egetmore/s 每秒执行getmore次数\u003c/li\u003e\n\u003cli\u003ecommand/s 每秒的命令数,比以上插入、查找、更新、删除的综合还多,还统计了别的命令\u003c/li\u003e\n\u003cli\u003eflushs/s 每秒执行fsync将数据写入硬盘的次数。\u003c/li\u003e\n\u003cli\u003emapped/s 所有的被mmap的数据量,单位是MB,\u003c/li\u003e\n\u003cli\u003evsize 虚拟内存使用量,单位MB\u003c/li\u003e\n\u003cli\u003eres 物理内存使用量,单位MB\u003c/li\u003e\n\u003cli\u003efaults/s 每秒访问失败数(只有Linux有),数据被交换出物理内存,放到swap。不要超过100,否则就是机器内存太小,造成频繁swap写入。此时要升级内存或者扩展\u003c/li\u003e\n\u003cli\u003elocked % 被锁的时间百分比,尽量控制在50%以下吧\u003c/li\u003e\n\u003cli\u003eidx miss …\u003c/li\u003e\u003c/ul\u003e"
May 7, 2012
Mongdb监控 (MMS)
"\u003cp\u003eMMS (MongoDB Monitoring Service) is a hosted application created by \u003ca href=\"http://10gen.com/\"\u003e10gen\u003c/a\u003e for monitoring MongoDB deployments. MMS Collects statistics on all key server and hardware indicators and presents this data through an intuitive web interface\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e先简单说下原理:\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e1、在mms服务器上添加mongodb服务器的ip,端口,user,password.\n2、在mongodb服务器所在的内网空闲机器上安装定制的agent脚本。\n3、agent脚本从mms获取你的服务器Ip及端口等信息,然后连接到mongodb服务器获取必要的监控数据。\n4、agent脚本将监控信息上传到mms服务器,我们登陆后就可以查看到相应的信息了。\u003c/p\u003e\n\u003cp\u003e主页地址如下\u003c/p\u003e\n\u003cp\u003e1. \u003ca href=\"https://mms.10gen.com/help/install.html\"\u003ehttps://mms.10gen.com/help/install.html\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e在Hosts项上点击添加,此处hostname填写内 …\u003c/p\u003e"
May 4, 2012
nginx: [warn] the “log_format” directive may be used only on “http” level ...解决办法
"\u003cp\u003e新开了一个vps,装了最新的nginx 1.0.2版本,将原来的虚拟主机配置直接拿过来.用nginx -t 测试语法的时候,发现提示以下警告信息\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[root@centos nginx]# ./sbin/nginx -t\nnginx: [warn] the “log_format” directive may be used only on “http” level in /usr/local/nginx/conf/vhosts/bbs.conf:62\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e解决办法如下:\u003c/p\u003e\n\u003cp\u003e将/usr/local/nginx/conf/nginx.conf 里server段里的下面代码移出放到该server段的前面即可。\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003elog_format access ‘$remote_addr – $remote_user [$time_local] “$request” ‘\n‘$status $body_bytes_sent “$http_referer” ‘\n‘”$http_user_agent” $http_x_forwarded_for’;\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e如果有其的虚拟主机开启了日志,也按上面的要求移出server段 …\u003c/p\u003e"