To zadanie zostało wykonane w dwuosobowym zespole o składzie Łukasz Mielewczyk oraz Marek Białousz. Do rozwiązania zadania została wykorzystana baza danych mongoDB. Każdy z nas pracował na swoich komputerach, a na końcu porównywaliśmy wyniki.
Dane zawierają informacje o transakcjach. Pobierz. Kolumny:
Do rozwiązania zadania użyto bazy mongoDB. Należy ją pobrać ze strony i zainstalować. Następnie aby uruchomić bazę danych, należy w konsoli cmd i wydać polecenie:
mongod
Przed wykonaniem czynności upewnij się czy serwer jest uruchiomony. Jeśli nie: przeczytaj jak to zrobić. Następnie aby zaimportować z pliku do bazy danych (oczywiście baza danych musi być uruchomiona) należy wydać w cmd polecenie:
mongoimport --db test --collection test --file trades.json
Przed wykonaniem czynności upewnij się czy dane zostały zaimportowane. Jeśli nie: przeczytaj jak to zrobić. Aby wyświetlić przykładową daną, początkowo trzeba włączyć mongo shell. Polecenie:
mongo
db.test.aggregate(
{ $limit: 1 }
)
Przed wykonaniem czynności upewnij się czy dane zostały zaimportowane. Jeśli nie: przeczytaj jak to zrobić. Aby zobaczyć ilość danych należy wykorzystać polecenie:
db.test.aggregate( [
{ $group: {
_id: null,
count: { $sum: 1 }
} }
] )
{ "_id" : null, "count" : 1000001 }
Przed wykonaniem czynności upewnij się czy dane zostały zaimportowane. Jeśli nie: przeczytaj jak to zrobić. Następnie można wyświetlić pierwszych 10 najdroższych transakcji, polecenie:
db.test.aggregate(
{ $sort: { price: -1 } },
{ $limit: 10 }
)
Przed wykonaniem czynności upewnij się czy dane zostały zaimportowane. Jeśli nie: przeczytaj jak to zrobić. Następnie można wyświetlić dane gdzie ticket jest równe z109 lub z433:
db.test.aggregate(
{ $match: {
$or: [
{ ticket: "z109" },
{ ticket: "z433" }
]
} },
{ $limit: 10 }
)
Przed wykonaniem czynności upewnij się czy dane zostały zaimportowane. Jeśli nie: przeczytaj jak to zrobić. Następnie można wyświetlić dane gdzie ticket jest równe z109 oraz posortowano je wg ceny:
db.test.aggregate(
{ $match: { ticket: "z109" } },
{ $sort: { price: -1 } },
{ $limit: 10 }
)
Przed wykonaniem czynności upewnij się czy dane zostały zaimportowane. Jeśli nie: przeczytaj jak to zrobić. Następnie można sumować ceny dla biletów, w tym celu musimy pogrupować dane wg biletów, polecenie:
db.test.aggregate(
{ $group: {
_id: "$ticket",
total: { $sum: "$price" } }
}
)
Przed wykonaniem czynności upewnij się czy dane zostały zaimportowane. Jeśli nie: przeczytaj jak to zrobić. Następnie można sprawdzić jakie 10 pierwszych biletów zostało wysprzedanych za największą cenę, w tym cale należy uzyć polecenia:
db.test.aggregate(
{ $group: {
_id: "$ticket",
total: { $sum: "$price" }
} },
{ $sort: { total: -1 } }
)
Przed wykonaniem czynności upewnij się czy dane zostały zaimportowane. Jeśli nie: przeczytaj jak to zrobić. Tym razem można posortować BID'y wg średniej, ponieważ występują w tablicy trzeba je odzielić (polecenie $unwind) - wtedy jedna dana została tak jakby skopiowana tyle ile jest elementów tablicy oraz zostanie do nich przypisany pojedyńczy element tablicy o nazwie kolumny jaka była wcześniej. Następnie pogrupować oddzielone bilety posortować, polecenie:
db.test.aggregate(
{ $unwind: "$details.bids" },
{ $group: {
_id: "$ticket",
bids: { $avg: "$bids" }
} },
{ $sort: { bids: -1 } }
)
Przed wykonaniem czynności upewnij się czy dane zostały zaimportowane. Jeśli nie: przeczytaj jak to zrobić. Tym razem można posortować bilety wg średniej ceny, która jest większa niż 110, bez wyświetlania pierwszych 5. Polecenie:
db.test.aggregate(
{ $group: {
_id: "$ticket",
price: { $avg: "$price" }
} },
{ $sort: { price: 1 } },
{ $match: { price: { $gt : 110 } } },
{ $skip: 5 }
)
var before = new Date()
#komenda wykonująca agregację
var after = new Date()
execution_mills = after - before
Agregacja | Ł. Mielewczyk | M. Białousz |
---|---|---|
Przykładowy rekord | 79 ms | 85 ms |
Ilość danych | 2327 ms | 2383 ms |
Sortowanie | 5651 ms | 6058 ms |
Szukanie danych | 166 ms | 175 ms |
Sortowanie konkretnych danych | 1049 ms | 1320 ms |
Sumowanie | 1898 ms | 2051 ms |
Sumowanie i sortowanie | 1943 ms | 1988 ms |
Tablica, średnia i sortowanie | 6241 ms | 6275 ms |
Pomijanie pierwszych danych | 1889 ms | 2013 ms |
Nazwa | Wartosć | |
---|---|---|
Ł. Mielewczyk | M. Białousz | |
Procesor | Core(TM) i3-4005U CPU 1,7 GHz 1,7 GHz | Intel Core i7-4510U 2.0 GHz |
RAM | 12 GB | 8,0 GB |
Dysk | HDD | Toshiba MQ01ABD025 1TB |
System operacyjny | Windows 10 64-bit | Windows 8.1 x64 |
Wersje mongoDB | mongoDB 3.2.6 | mongoDB 3.2.6 |
Zasoby żużycia - Ł. Mielewczyk
|
Zasoby żużycia - M. Białousz
|
---|