php – MongoDB记录太多了?
我有一个与MongoDB交互的
PHP应用程序.直到最近,该应用程序工作正常,但几天前我发现应用程序开始响应真的很慢.其中一个系列已达到500K记录.因此MongCursor对该集合的任何查询都会保持超时.
我不认为500K记录是太多了.使用mongodb的其他页面也开始变慢,但没有使用具有500k记录的集合的页面.不与MongoDB交互的静态页面仍然可以快速响应. 我不确定这里会出现什么问题.我已将索引编入索引,因此这似乎不是问题.另一点需要注意的是服务器上的RAM规格是512 MB,当PHP执行Mongo时,top命令显示15000k内存空闲. 任何帮助将不胜感激. 解决方法
为了总结聊天室的后续行动,问题实际上与find()查询相关,该查询正在扫描所有~500k文档以查找15:
db.tweet_data.find({ $or: [ { in_reply_to_screen_name: /^kunalnayyar$/i,handle: /^kaleycuoco$/i,id: { $gt: 0 } },{ in_reply_to_screen_name: /^kaleycuoco$/i,handle: /^kunalnayyar$/i,id: { $gt: 0 } } ],in_reply_to_status_id_str: { $ne: null } } ).explain() { "cursor" : "BtreeCursor id_1","nscanned" : 523248,"nscannedObjects" : 523248,"n" : 15,"millis" : 23682,"nYields" : 0,"nChunkSkips" : 0,"isMultiKey" : false,"indexOnly" : false,"indexBounds" : { "id" : [ [ 0,1.7976931348623157e+308 ] ] } } 此查询使用case-insensitive regular expressions,这将无法有效使用索引(尽管在这种情况下实际上没有定义). 建议的方法: >创建小写handle_lc和inreply_lc字段以进行搜索 db.tweet.ensureIndex({handle_lc:1,inreply_lc:1}) ????db.tweet_data.find({?????????$或:?????????[????????????{in_reply_to_screen_name:’kunalnayyar’,句柄:’kaleycuoco’,id:{$gt:0}},????????????{in_reply_to_screen_name:’kaleycuoco’,句柄:’kunalnayyar’,id:{$gt:0}}????????]?????}) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |