2012-09-14 14 views
5

Mam następujące kwerendy i zajmuje średnio 9 sekund, aby zwrócić wyniki. Nie ma na nim żadnych filtrów, więc nie jestem pewien, czy indeks mógłby pomóc. Dlaczego to działa tak wolno? Jest tam tylko 250 obiektów i tylko 4 pola (cały tekst).Dlaczego collections.find ({}) zajmuje ponad 9 sekund dla 250 obiektów (MongoMapper)

Country.collection.find({},:fields => ['country_name', 'country_code']).to_json 

"cursor":"BasicCursor", 
"nscanned":247, 
"nscannedObjects":247, 
"n":247, 
"millis":0, 
"nYields":0, 
"nChunkSkips":0, 
"isMultiKey":false, 
"indexOnly":false, 
"indexBounds":{}, 
"allPlans":[{"cursor":"BasicCursor","indexBounds":{}}] 

Procesor, pamięć i dysk na komputerze nie zauważają nawet uruchomienia kwerendy. Każda pomoc będzie doceniona.

+3

czy próbowałeś uruchomić to samo zapytanie w powłoce Mongo? – soulcheck

+0

nie, szczerze mówiąc, nie mam zbyt wiele doświadczenia w powłoce Mongo, jakie zmiany w składni będą potrzebne, aby potraktować to jako to samo zapytanie? – ABrowne

+0

coś takiego: 'db.countries.find ({}, {'country_name': 1, 'country_code': 1})' – soulcheck

Odpowiedz

3

Tworzenie indeksów na „COUNTRY_NAME” fiels używając:

db.countries.ensureIndex({country_name:1}); 

To przyspieszy zapytanie ogromnie Możesz dowiedzieć się więcej o indeksach here

PS można wpisać „to”, aby wyświetlić więcej, gdy zobaczysz frazę "ma więcej" lub możesz wyświetlić cały wynik bez "ma więcej", używając:

db.countries.find({}, {'country_name' : 1, 'country_code' : 1}).forEach(printjson) 

i zawsze można ustawić profiler używając:

>use databaseName; 
> db.setProfilingLevel(2); // 2 tell the profiler to catch everything happened inside the DB 

Możesz dowiedzieć się więcej o profilera here

można wyświetlić dane wewnątrz profiler używając

> db.system.profile.find() 

Metoda ta daje więcej informacji o swojej bazie danych i o tym, co dzieje się w środku.

+3

Dziękuję, uruchamiam db.countries.find ({}, {'country_name': 1, 'country_code': 1}). ForEach (printjson) w powłoce działa i zwraca wszystkie wyniki w ciągu milisekund, tak jak oczekiwałbym mongo do.Zamierzam zainstalować profiler na moim stosie ruby, zobacz, co powoduje zapytanie, które powinno zostać wykonane w milisekundach w kilka sekund. – ABrowne

+0

Daj mi znać, jeśli tworzenie indeksu przyspieszy twoje zapytanie, jest to świetna funkcja w mongodb. – mongotop

+4

Niestety, nie, ale okazało się, że to nie było mongo, ale kierowca z rubinem i to_json spowalniały pracę. Zakończyłem buforowanie wyniku json, który działa naprawdę dobrze. Teraz całe wywołanie ajax kończy się w ciągu 70ms – ABrowne

Powiązane problemy