2015-02-26 4 views
0

Я новичок в nodejs и mongodb. Чтобы проверить это, я захватил 2.500.000 твитов из #oscars. Сейчас я играю немного с данными, но найти запросы как один ниже, очень медленно ... (до 40 секунд) (я делаю запросы непосредственно на консоли)Очень медленная производительность на mongodb find

db.oscars.find({user.screen_name: "monxas"}) 

Am Я что-то делаю неправильно? Есть ли способ ускорить выполнение этих запросов?

твито имеет такую ​​структуру, если это помогает:

{ 
    "_id" : ObjectId("54ea1f0f5fbae7a02067024b"), 
    "created_at" : "Sun Feb 22 18:25:20 +0000 2015", 
    "id" : 5.6956360590721434E+17, 
    "id_str" : "569563605907214338", 
    "text" : "#Oscars2015 Who will win tonight? All hopes are on you guys.", 
    "source" : "<a href=\"http://twitter.com/#!/download/ipad\" rel=\"nofollow\">Twitter for iPad</a>", 
    "truncated" : false, 
    "in_reply_to_status_id" : null, 
    "in_reply_to_status_id_str" : null, 
    "in_reply_to_user_id" : null, 
    "in_reply_to_user_id_str" : null, 
    "in_reply_to_screen_name" : null, 
    "user" : { 
    "id" : 2596742425.0, 
    "id_str" : "2596742425", 
    "name" : "jclivesforever26", 
    "screen_name" : "jacuasay092600", 
    "location" : "", 
    "url" : null, 
    "description" : "Da Bulls!!! Ed Sheeran is life!!!", 
    "protected" : false, 
    "verified" : false, 
    "followers_count" : 21, 
    "friends_count" : 183, 
    "listed_count" : 0, 
    "favourites_count" : 78, 
    "statuses_count" : 283, 
    "created_at" : "Mon Jun 30 18:13:13 +0000 2014", 
    "utc_offset" : null, 
    "time_zone" : null, 
    "geo_enabled" : true, 
    "lang" : "en", 
    "contributors_enabled" : false, 
    "is_translator" : false, 
    "profile_background_color" : "C0DEED", 
    "profile_background_image_url" : "http://abs.twimg.com/images/themes/theme1/bg.png", 
    "profile_background_image_url_https" : "https://abs.twimg.com/images/themes/theme1/bg.png", 
    "profile_background_tile" : false, 
    "profile_link_color" : "0084B4", 
    "profile_sidebar_border_color" : "C0DEED", 
    "profile_sidebar_fill_color" : "DDEEF6", 
    "profile_text_color" : "333333", 
    "profile_use_background_image" : true, 
    "profile_image_url" : "http://pbs.twimg.com/profile_images/542805253952135168/Ttwm541P_normal.jpeg", 
    "profile_image_url_https" : "https://pbs.twimg.com/profile_images/542805253952135168/Ttwm541P_normal.jpeg", 
    "profile_banner_url" : "https://pbs.twimg.com/profile_banners/2596742425/1421468064", 
    "default_profile" : true, 
    "default_profile_image" : false, 
    "following" : null, 
    "follow_request_sent" : null, 
    "notifications" : null 
    }, 
    "geo" : null, 
    "coordinates" : null, 
    "place" : null, 
    "contributors" : null, 
    "retweet_count" : 0, 
    "favorite_count" : 0, 
    "entities" : { 
    "hashtags" : [{ 
     "text" : "Oscars2015", 
     "indices" : [0, 11] 
     }], 
    "trends" : [], 
    "urls" : [], 
    "user_mentions" : [], 
    "symbols" : [] 
    }, 
    "favorited" : false, 
    "retweeted" : false, 
    "possibly_sensitive" : false, 
    "filter_level" : "low", 
    "lang" : "en", 
    "timestamp_ms" : "1424629520285" 
} 

ответ

3

Используйте метод explain курсора, чтобы узнать больше о плане запроса

db.oscars.find({user.screen_name: "monxas"}).explain(); 

Если нет индексов, определенных, то вы можете добавить один на user.screen_name для ускорения запроса с использованием ensureIndex следующим образом:

db.oscars.ensureIndex({"user.screen_name": 1}); 
+0

хорошо, что сделало его молниеносно! благодаря! просто один вопрос ... Сколько индексов у меня есть? есть ли разумный предел? – monxas

+1

Это зависит от ряда факторов, но главным образом [селективности] (http://docs.mongodb.org/manual/tutorial/create-queries-that-ensure-selectivity/#index-selectivity), подбора индексов в ОЗУ, повторного использования индексы в нескольких запросах, когда это возможно, и создание индексов, которые могут поддерживать все поля в заданном запросе. Подробную документацию по выбору полей для индексирования см. В [документация по учебникам по индексированию] (http://goo.gl/N6xlkS). Другими полезными учебниками являются [Рекомендации по индексированию MongoDB] (http://goo.gl/um2DPi) и [MongoDB Indexing tip # 3] (http://goo.gl/cgLv0C), чтобы назвать несколько. – chridam

Смежные вопросы