Skip to content
七 24 11

将Excel文件的数据导入到MongDB

by bbtflash

命令:mongoimport –host localhost –db test –collection test –type csv –file ip.csv –headerline –upsert

 

官方文档:http://www.mongodb.org/display/DOCS/Import+Export+Tools

七 24 11

400W记录在Mongodb中的性能测试

by bbtflash

环境:

MongoDB: Ver1.8.3

OS: Windows 2003标准版

CPU: T2250, 1.73GHz,降频至800MHz

内存:1GB

硬盘:5400转80GB

1.采用 for(var i=1000000000;i<1004000000;i++)db.test.insert({id:i,ip_from:i,ip_to:i+1}) 插入400W的记录

2.在ip_from与ip_to字段上创建组合索引

3.使用db.test.find({ip_from:{$gt:1003000493},ip_to:{$lt:1003000520}}).limit(50) 进行查询

4.当查询结果记录匹配数有40条记录,显示40条全部记录时,查询耗时6040ms,当显示1至39条记录时,查询耗时10ms内

5.实在不明白为什么显示结果跟它有这么大的差异?

七 24 11

MongDB创建索引

by bbtflash

1.单列索引
在字段x上创建索引,1 (ascending) or -1 (descending)

db.data.ensureIndex({x:1})

2.组合索引

db.data.ensureIndex({name: 1, info: -1})

显示表data上的所有索引

db.data.getIndexes()

3.删除索引

db.data.dropIndex({x: 1, y: -1})

七 24 11

[转]Mysql/Sql server与Mongodb查询

by bbtflash

MySQL中的常用SQL语句在MongoDB中的写法,如果你长期使用MySQL而对MongoDB跃跃欲试,这篇简单的文章可以帮助你更快的进入角色。
查询:
MySQL:

SELECT * FROM user

Mongo:

db.user.find()

MySQL:

SELECT * FROM user WHERE name = ‘starlee’

Mongo:

db.user.find({‘name’ : ‘starlee’})

插入:
MySQL:

INSERT INOT user (`name`, `age`) values (‘starlee’,25)

Mongo:

db.user.insert({‘name’ : ‘starlee’, ‘age’ : 25})

如果你想在MySQL里添加一个字段,你必须:

ALTER TABLE user….

但在MongoDB里你只需要:

db.user.insert({‘name’ : ‘starlee’, ‘age’ : 25, ‘email’ : ‘starlee@starlee.com’})

删除:
MySQL:

DELETE * FROM user

Mongo:

db.user.remove({})

MySQL:

DELETE FROM user WHERE age < 30

Mongo:

db.user.remove({‘age’ : {$lt : 30}})
$gt : > ; $gte : >= ; $lt : < ; $lte : <= ; $ne : !=

更新:
MySQL:

UPDATE user SET `age` = 36 WHERE `name` = ‘starlee’

Mongo:

db.user.update({‘name’ : ‘starlee’}, {$set : {‘age’ : 36}})

MySQL:

UPDATE user SET `age` = `age` + 3 WHERE `name` = ‘starlee’

Mongo:

db.user.update({‘name’ : ‘starlee’}, {$inc : {‘age’ : 3}})

MySQL:

SELECT COUNT(*) FROM user WHERE `name` = ‘starlee’

Mongo:

db.user.find({‘name’ : ‘starlee’}).count()

MySQL:

SELECT * FROM user limit 10,20

Mongo:

db.user.find().skip(10).limit(20)

MySQL:

SELECT * FROM user WHERE `age` IN (25, 35,45)

Mongo:

db.user.find({‘age’ : {$in : [25, 35, 45]}})

MySQL:

SELECT * FROM user ORDER BY age DESC

Mongo:

db.user.find().sort({‘age’ : -1})

MySQL:

SELECT DISTINCT(name) FROM user WHERE age > 20

Mongo:

db.user.distinct(‘name’, {‘age’: {$lt : 20}})

MySQL:

SELECT name, sum(marks) FROM user GROUP BY name

Mongo:

db.user.group({
key : {‘name’ : true},
cond: {‘name’ : ‘foo’},
reduce: function(obj,prev) { prev.msum += obj.marks; },
initial: {msum : 0}
});

MySQL:

SELECT name FROM user WHERE age < 20

Mongo:

db.user.find(‘this.age < 20′, {name : 1})

发现很多人在搜MongoDB循环插入数据,下面把MongoDB循环插入数据的方法添加在下面:

for(var i=0;i<100;i++)db.test.insert({uid:i,uname:’nosqlfan’+i});

上面一次性插入一百条数据,大概结构如下:

{ “_id” : ObjectId(“4c876e519e86023a30dde6b8″), “uid” : 55, “uname” : “nosqlfan55″ }
{ “_id” : ObjectId(“4c876e519e86023a30dde6b9″), “uid” : 56, “uname” : “nosqlfan56″ }
{ “_id” : ObjectId(“4c876e519e86023a30dde6ba”), “uid” : 57, “uname” : “nosqlfan57″ }
{ “_id” : ObjectId(“4c876e519e86023a30dde6bb”), “uid” : 58, “uname” : “nosqlfan58″ }
{ “_id” : ObjectId(“4c876e519e86023a30dde6bc”), “uid” : 59, “uname” : “nosqlfan59″ }
{ “_id” : ObjectId(“4c876e519e86023a30dde6bd”), “uid” : 60, “uname” : “nosqlfan60″ }

七 14 11

Solr 3.3使用group进行分组查询时的bug

by bbtflash

1.使用group.main后,无法使用start参数,使用start的起始数字超过rows的数字时,始终没有查询结果列表,但numberFound是有数据的,该Bug在3.4中已经解决

2.使用group后,无法查询过滤重复记录后的记录总数,始终返回的是未排除重复记录的总数,这个感觉不太合理,已经在用户论坛提出来,目前未解决

Solr 3.x最新动态地址: https://builds.apache.org/job/Solr-3.x/

Solr用户论坛:http://lucene.472066.n3.nabble.com/Solr-User-f472068.html

七 12 11

[Solr报错]QueryElevationComponent requires the schema to have a uniqueKeyField implemented using StrField

by bbtflash

直接删除新 solrconfig.xml 配置文件中的 QueryElevationComponent 节点即可解决

六 21 11

使用Memcached性能调优的几种方法

by bbtflash

1.缓存耗时的SQL结果

2.缓存页面中for ,next等大批量的循环

3.使用getbulk方法,批量获取key/value,减少memcached连接

4.实时监控memcached运行状态,内存使用率不要超过85%,否则命中率会严重降低

5.合理设置memcached超时时间,防止网络原因引起的连接超时导致性能下降

六 21 11

使用Sql Server nvarchar(30),在Coldfusion9下性能降低

by bbtflash

在我们的生产环境发现,在采用SQl Server 2008时,对表中的一nvarchar字段进行主键查询,居然耗时500ms左右,实在难以忍受,通过不断的测试,同是nvarchar字段但是长度为50的nvarchar只需要4ms左右,遂将nvarchar(30)–>nvarchar(50)速度立即提升到4ms。

估计这是Coldfusion9数据连接里面的一个bug(经测试直接用查询分析器,同样的SQL,查询速度亦非常的快!)

十二 9 10

利用Facebook lint 帮助API快速开发

by bbtflash

最近与同事做Facebook share API开发的时候,发现Share 过后的URL在统计的时候并没有实时展示出来,或是直接统计结果为0,最后才知道,原来是页面中的 <link rel=”canonical” href=”http://www.abc.com/abc.html”> 在作怪,最开始一直没有找到原因,是通过Facebook lint的帮助才发现,lint还有很多实用的功能,http://developers.facebook.com/tools/lint/

十一 3 10

设置document.domain属性,解决iframe跨域问题

by bbtflash

假如有这样一个需求:

domain: a.xxx.com页面调用 domain: b.xxx.com的上传页面,b.xxx.com上传成功上传文件后执行a.xx.com的js代码。直接使用是会报js错的,“拒绝访问”,这是因为浏览器不允许跨域访问。

解决方法:在a.xxx.com以及b.xxx.com中的页面同时设置 document.domain=”xxx.com”; 就可以解决此问题了。

需要注意的是:document.domain中的域名值只能是比当前域名同级或更高一级(如:a.xxx.com可以设置为xxx.com和a.xxx.com),不能设置为 b.xxx.com以及yyy.com