May 7, 2012
Mongodb亿级数据量的性能测试
"进行了一下Mongodb亿级数据量的性能测试,分别测试如下几个项目:\n(所有插入都是单线程进行,所有读取都是多线程进行)\n1) 普通插入性能 (插入的数据每条大约在1KB左右)\n2) 批量插入性能 (使用的是官方C#客户端的InsertBatch),这个测的是批量插入性能能有多少提高\n3) 安全插入功能 (确保插入成功,使用的是SafeMode.True开关),这个测的是安全插入性能会差多少\n4) 查询一个索引后的数字列,返回10条记录(也就是10KB)的性能,这个测的是索引查询的性能\n5) 查询两个索引后的数字列,返回10条记录(每条记录只返回20字节左右的2个小字段)的性能,这个测的是返回小数据量以及多一个查询条件对性能的影响\n6) 查询一个索引后的数字列,按照另一个索引的日期字段排序(索引建立的时候是倒序,排序也是倒序),并且Skip100条记录后返回10条记录的性能,这个测的是Skip和Order对性能的影响\n7) 查询100条记录(也就是100KB)的性能(没有排序,没有条件),这个测的是大数据量的查询结果对性能的影响\n8) 统计随着测试的进行,总磁盘占用,索引磁盘占用以及数 …"
May 7, 2012
mongodb索引讲解与性能调优
"mongodb索引规则基本上与传统的关系库一样,大部分优化MySQL/Oracle/SQLite索引的技巧也适用于mongodb。\n一、 为什么用索引:\n当查询中用到某些条件时,可以对该键建立索引,以提高查询速度。\n如果数据量很多且查询多于更新时,可以用索引提高查询的速度。\n二、 索引管理:\na) 查询索引:\n查询已有索引的明细: 查询索引很简单,比如说需要查询mailaccess数据库中的Mail collection上的索引时:\nmongo 进入mongo\nMongoDB shell version: 1.8.1\nconnecting to: test\nuse mailaccess 进入mailaccess database\nswitched to db mailaccess\ndb.Mail.getIndexes() 查询索引明细\n[\n{\n“name” : “_id_”,\n“ns” : “mailaccess.Mail”,\n“key” : {\n“_id” : 1\n},\n“v” : 0\n},\n{\n“_id” : …"
May 7, 2012
MongoDB 索引数据类型优化,节省60%内存
"最近trunk.ly的工程师通过mongostat发现了大量的page fault,然后通过检查发现,他们的索引已经超出内存限制了(没有keep all index in RAM)。于是他们决定开始减小索引大小,通过测试得出了如下的数据,不同的数据类型的索引大小有2到3倍的差距。\n虽然能够想像得到,但是直观的数据图可能让我们更深刻的认识到。他们的测试再一次告诉我们:给索引定一个好的数据结构是多么重要。\n这是测试结果图,分别是用int、MongoDB的ObjectID、base64和md5的字符串做索引产生的索引大小:\n测试过程也非常简单,首先用下面脚本将各种不同数据结构的数据写入到不同的collection里:\n#!/usr/bin/env python import pymongo import bson from pymongo import Connection db = connection.test_database print(\u0026#39;ObjectID\u0026#39;) for i in range(1, 1000000): …"
May 7, 2012
mongodb的监控与性能优化
"一.mongodb的监控\nmongostat是mongdb自带的状态检测工具,在命令行下使用。它会间隔固定时间获取mongodb的当前运行状态,并输出。如果你发现数据库突然变慢或者有其他问题的话,你第一手的操作就考虑采用mongostat来查看mongo的状态。\n它的输出有以下几列:\ninserts/s 每秒插入次数 query/s 每秒查询次数 update/s 每秒更新次数 delete/s 每秒删除次数 getmore/s 每秒执行getmore次数 command/s 每秒的命令数,比以上插入、查找、更新、删除的综合还多,还统计了别的命令 flushs/s 每秒执行fsync将数据写入硬盘的次数。 mapped/s 所有的被mmap的数据量,单位是MB, vsize 虚拟内存使用量,单位MB res 物理内存使用量,单位MB faults/s 每秒访问失败数(只有Linux有),数据被交换出物理内存,放到swap。不要超过100,否则就是机器内存太小,造成频繁swap写入。此时要升级内存或者扩展 locked % 被锁的时间百分比,尽量控制在50%以下吧 idx miss % …"
May 7, 2012
Mongdb监控 (MMS)
"MMS (MongoDB Monitoring Service) is a hosted application created by 10gen for monitoring MongoDB deployments. MMS Collects statistics on all key server and hardware indicators and presents this data through an intuitive web interface\n先简单说下原理:\n1、在mms服务器上添加mongodb服务器的ip,端口,user,password. 2、在mongodb服务器所在的内网空闲机器上安装定制的agent脚本。 3、agent脚本从mms获取你的服务器Ip及端口等信息,然后连接到mongodb服务器获取必要的监控数据。 4、agent脚本将监控信息上传到mms服务器,我们登陆后就可以查看到相应的信息了。\n主页地址如下\n1. https://mms.10gen.com/help/install.html\n在Hosts项上点击添加,此处hostname填写内 …"
May 4, 2012
nginx: [warn] the “log_format” directive may be used only on “http” level ...解决办法
"新开了一个vps,装了最新的nginx 1.0.2版本,将原来的虚拟主机配置直接拿过来.用nginx -t 测试语法的时候,发现提示以下警告信息\n[root@centos nginx]# ./sbin/nginx -t nginx: [warn] the “log_format” directive may be used only on “http” level in /usr/local/nginx/conf/vhosts/bbs.conf:62\n解决办法如下:\n将/usr/local/nginx/conf/nginx.conf 里server段里的下面代码移出放到该server段的前面即可。\nlog_format access ‘$remote_addr – $remote_user [$time_local] “$request” ‘ ‘$status $body_bytes_sent “$http_referer” ‘ ‘”$http_user_agent” $http_x_forwarded_for’;\n如果有其的虚拟主机开启了日志,也按上面的要求移出server段放 …"
May 3, 2012
三招解决MongoDB的磁盘IO问题
"有点标题党的意思,不过下面三招确实比较实用,内容来自Conversocial公司的VP Colin Howe在London MongoDB用户组的一个分享。 申请:下面几点并非放四海皆准的法则,具体是否能够使用,还需要根据自己的应用场景和数据特点来决定。\n1.使用组合式的大文档 我们知道MongoDB是一个文档数据库,其每一条记录都是一个JSON格式的文档。比如像下面的例子,每一天会生成一条这样的统计数据:\n{ metric: “content_count”, client: 5, value: 51, date: ISODate(“2012-04-01 13:00”) } { metric: “content_count”, client: 5, value: 49, date: ISODate(“2012-04-02 13:00”) }\n而如果采用组合式大文档的话,就可以这样将一个月的数据全部存到一条记录里:\n{ metric: “content_count”, client: 5, month: “2012-04”, 1: 51, 2: 49, … }\n通过上面两种方式存储,预先 …"
April 29, 2012
linux tcpdump命令参数及用法详解–linux下抓包网络分析
"采用命令行方式,它的命令格式为:\ntcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ][ -i 网络接口 ] [ -r 文件名] [ -s snaplen ][ -T 类型 ] [ -w 文件名 ] [表达式 ]\n1. tcpdump的选项介绍 -a 将网络地址和广播地址转变成名字; -d 将匹配信息包的代码以人们能够理解的汇编格式给出; -dd 将匹配信息包的代码以c语言程序段的格式给出; -ddd 将匹配信息包的代码以十进制的形式给出; -e 在输出行打印出数据链路层的头部信息; -f 将外部的Internet地址以数字的形式打印出来; -l 使标准输出变为缓冲行形式; -n 不把网络地址转换成名字; -t 在输出的每一行不打印时间戳; -v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息; -vv 输出详细的报文信息; -c 在收到指定的包的数目后,tcpdump就会停止; -F 从指定的文件中读取表达式,忽略其它的表达式; -i 指定监听的网络接口; -r 从指定的文件中读取包(这些包一般通过-w选项产生); …"
April 27, 2012
[教程]mongodb常用维护命令
"1.客户端常用命令 ** #mongo ** \u0026gt;help //列出帮助** ** \u0026gt;db.help() //db级别的帮助** ** \u0026gt;db.mycollection.help() //collection 级别的帮助\n常用命令: \u0026gt;show dbs //show database names \u0026gt;show collections //show collections in current database \u0026gt;use //set current database \u0026gt;db.foo.find() //list objects in collection foo \u0026gt;db.foo.find({a:1}) //list objects in foo where a == 1 \u0026gt;db.createCollection(name, { size : …, capped : …, max : … } ) //创建collection \u0026gt;db.dropDatabase() //删除库 \u0026gt;db.collection.count() //统 …"
April 27, 2012
MongoDB之导入和导出
"在上文中,我们了解了 教你如何利用MySQL学习MongoDB之授权和权限,本文中我们继续我们的学习之旅,学习两者的导入和导出。\n1、MySQL导入和导出\n(1)、mysqlimport\n此工具位于mysql/bin目录中,是MySQL的一个载入(或者说导入)数据的一个非常有效的工具。这是一个命令行工具。有两个参数以及大量的选项可供选择。这个工具把一个文本文件(text file)导入到你指定的数据库和表中。比方说我们要从文件student.txt中把数据导入到数据库class中的表 student中:\nmysqlimport class.student student.txt\n(2)、load data infile\n这个命令与mysqlimport非常相似,但这个方法可以在MySQL命令行中使用。 如mysqlimport工具一样,这个命令也有一些可以选择的参数。比如您需要把自己的电脑上的数据导入到远程的数据库服务器中,您可以使用下面的命令:\nLoad data local infile “d:\\student.txt” into table student;\n上面的local参数 …"