#29 楼 @windstill 用传统坐标试过的。之前就是传统坐标。 也不是组合索引,当然组合和非组合索引都试过。
mongodb version 2.6.x
stackoverflow 基本被我翻烂了。:)
所以我现在估计并不是单纯的索引问题,因为这个 collection 被 insert, update 也很频繁,也可能是其他原因引起 v2.6 下都是库级锁,所以很蛋疼。
#25 楼 @windstill 索引不在 coordinates 上,在 location 字段上。如下:
{
"v" : 1,
"key" : {
"location" : "2dsphere",
},
"name" : "location_2dsphere,
"ns" : "db.example",
"2dsphereIndexVersion" : 2
}
我的总数据量200w
左右。
nearSphere 一个坐标的总量在42w
左右,为啥我查询的时间要 2s(2000ms
) 多呢?
下面是具体的数据:
数据存储的格式如下:
{
"postid":NumberLong(97040),
"accountid":NumberLong(348670),
"location":{
"type":"Point",
"coordinates":[
112.56531,
32.425657
]
},
"type":NumberLong(1),
"countspreads":NumberLong(6),
"countavailablespreads":NumberLong(6),
"timestamp":NumberLong(1428131578)
}
** 索引在 location 字段上面 **
{
"v" : 1,
"key" : {
"location" : "2dsphere"
},
"name" : "location_2dsphere",
"2dsphereIndexVersion" : 2
}
** 查询语句 **
db.example.find({"location":{"$nearSphere":{"$geometry":{"type":"Point","coordinates":[113.547821,22.18648]},"$maxDistance":50000, "$minDistance":0}}}).explain()
结果如下
{
"cursor" : "S2NearCursor",
"isMultiKey" : false,
"n" : 145255,
"nscannedObjects" : 1290016,
"nscanned" : 1290016,
"nscannedObjectsAllPlans" : 1290016,
"nscannedAllPlans" : 1290016,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 4087,
"indexBounds" : {
},
"server" : "DB-SH-01:27017",
"filterSet" : false
}
注意我的$maxDistance 很大,根据 explain 结果看,扫描了 100w+ 的记录,查询时间预计是 4087ms。 如果缩小$maxDistance 到 500, 结果如下:
{
"cursor" : "S2NearCursor",
"isMultiKey" : false,
"n" : 21445,
"nscannedObjects" : 102965,
"nscanned" : 102965,
"nscannedObjectsAllPlans" : 102965,
"nscannedAllPlans" : 102965,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 634,
"indexBounds" : {
},
"server" : "DB-SH-01:27017",
"filterSet" : false
}
这里看到扫描的记录数是 10w+,预计时间是 634ms 依然很大。
后面我记录把$maxDistance缩小到0.0001
,扫描的记录数也在 8w 左右,而时间徘徊在 600ms 左右。无法再减少。
这个时间是完全无法接受的。
不知道楼主如何测试出来100w记录能够在30ms左右的
。
路过,看美女
这个帖子应该移动到“瞎扯谈”里面,还要麻烦版主了
#41 楼 @karma 说实话,我这个主题问的都很主观化,所以习惯问题真要看个人。 关于你的 1,2,4 几个问题,举个简单例子:每行结束的时候,会情不自禁的敲上一个;(分号) 吗?if 后面会情不自禁的敲上一个{吗?呵呵 当然习惯是一个过程,再多学几天,我就习惯了,呵呵。
3 - 对于基础语法问题,恐怕要扯到好坏这个问题上,确实有难度,有的人就是喜欢 pascal 语法,但有人就是喜欢 C 系列的语法,或许还真有人喜欢用机器码,呵呵,难讲。
5 - 这个问题 - google 一直是我的习惯。
我承认发这个帖子,或者发这个主题的帖子是草率的,确实这个主题会引起很多口水仗。
6 - 谢谢,也希望 Ruby 能给你带来快乐和财富。
最后,我之所以说“ruby 语法有点乱” -- 其实是因为一个想法:ruby 基础语法既有 c 的影子,又有 pascal 的影子。
当然,如果你有时间,你可以去看看 delphi, vb.net, c#/java/php,然后试着用他们写个项目
over
感谢各位的倾力回复啊,收益良多,谢谢。
镐头书 Ruby1.8 有中文,1.9 有英文版
懂了,原来 Programming Ruby 才是镐头书
想请教下,我贴出的代码,这个网站自动加 [code][/code] 了?
ruby 里面有太多其它语言的影子了,如 js, java, .... ruby 里面有.net linq 的例子?
晕,算了,还是看英文版
any ideas will be appreciated.
are you using linux or mac os ? but as i think ,you should review something at there: http://rubygems.org/search?utf8=%E2%9C%93&query=smtp
try to use some smtp client of ruby.
good luck
换个邮件服务器试试
#7 楼 @tech_blogbin 碰到同样问题啊,招人确实是个问题啊
好吧,这个是个考验
为啥不直接用 PHP
还有一个问题,比如 输入 p, 代码提示里面居然没有“p”这个 method. 为何?