MongoDB version: 2.5.2
- 1a
użyłem skryptu wykładowcy z tąd
$ time bash 2unix.bash Train.csv Train2.csv
real 20m22.142s
user 10m32.572s
sys 8m12.063s
$ time mongoimport --type csv -c Train --file ./Train2.csv --headerline
2013-10-28T23:59:02.068+0100 check 9 6034196
2013-10-28T23:59:02.068+0100 imported 6034195 objects
real 134m33.441s
user 85m2.572s
sys 49m42.13s
- 1b
db.Train.count()
6034195
Wynik: 6034195 czyli się zgadza
- 1c
Do zamiany tagów na tablice użyłem skryptu który napisałem w ruby tutaj
$ ruby stringToarray.rb nosql Train
Wszystkich tagów: 17409994
Różnych tagów: 42048
- 1d
przygotowałem plik do jsona za pomocą tego skryptu z tąd
$ time bash stringTojson.sh text8.txt text8.json
real 3m14.336s
user 0m34.022s
sys 2m3.248s
$ time mongoimport --db Text --collection text8 --type json --file text8.json
Tue Oct 29 13:40:12.979 check 9 17005207
Tue Oct 29 13:40:13.823 imported 17005207 objects
real 13m17.613s
user 2m11.880s
sys 2m45.162s
Zawsze jeden z dwóch rdzeni przy imporcie działał na 100% ilość wątków wachała się pomiędzy 2-6 wątków.
Ogółem:
db.text8.count()
17005207
Różnych:
db.text8.distinct("word").length
253854
Najbardziej popularne słowo: Słowo "the" - 1061396 wystąpień czyli 6,24% wszystkich wyrazów
db.text8.aggregate(
[
{ $group : { _id : "$word" , number : { $sum : 1 } } },
{ $sort : { number : -1 } },
{ $limit : 1 }
]
)
{ "result" : [ { "_id" : "the", "number" : 1061396 } ], "ok" : 1 }
10 Najbardziej popularnych słów: 10 słów - 4205965 wystąpień czyli 24,73% wszystkich wyrazów
db.text8.aggregate(
[
{ $group : { _id : "$word" , number : { $sum : 1 } } },
{ $sort : { number : -1 } },
{ $limit : 10 },
{ $group : { _id : "10 słów", count: { $sum : "$number" } } }
]
)
{ "result" : [ { "_id" : "10 słów", "count" : 4205965 } ], "ok" : 1 }
wyniki umieściłem tutaj
100 Najbardziej popularnych słów: 100 słów - 7998978 wystąpień czyli 47,04% wszystkich wyrazów
db.text8.aggregate(
[
{ $group : { _id : "$word" , number : { $sum : 1 } } },
{ $sort : { number : -1 } },
{ $limit : 100 },
{ $group : { _id : "100 słów", count : { $sum : "$number" } } }
]
)
{ "result" : [ { "_id" : "100 słów", "count" : 7998978 } ], "ok" : 1 }
wyniki umieściłem tutaj
1000 Najbardziej popularnych słów: 1000 słów - 11433354 wystąpień czyli 67,23% wszystkich wyrazów
db.text8.aggregate(
[
{ $group : { _id : "$word" , number : { $sum : 1 } } },
{ $sort : { number : -1 } },
{ $limit : 1000 },
{ $group : { _id : "1000 słów", count : { $sum : "$number" } } }
]
)
{ "result" : [ { "_id" : "1000 słów", "count" : 11433354 } ], "ok" : 1 }
- 1e
Do obróbki użyłem bazy listy Stacji Paliw Orlen Mapka
Zaimportowałem baze w formacie JSON poleceniem:
$ time mongoimport -d GeoOrlen -c stacje < Stacje_paliw_Orlen.json
connected to: 127.0.0.1
Mon Nov 4 22:56:14.360 check 9 1245
Mon Nov 4 22:56:14.360 imported 1245 objects
real 0m0.284s
user 0m0.024s
sys 0m0.056s
przykładowy rekord:
db.geoJson.findOne()
{
"_id" : ObjectId("527817fe644839d19fd136b5"),
"loc" : {
"type" : "Point",
"coordinates" : [
20.021194,
49.453218
]
},
"name" : "Stacje paliw Orlen",
"city" : "Nowy Targ"
}
db.geoJson.ensureIndex({"loc" : "2dsphere"});
Warszawa 52.259, 21.020
Gdańsk 54.360, 18.639
Poznań 52.399, 16.900
db.geoJson.find( { loc : { $near :
{ $geometry :
{ type : "Point" ,
coordinates: [ 21.020, 52.259 ] } },
$maxDistance : 10000
} } )
db.geoJson.find( { loc : { $near :
{ $geometry :
{ type : "Point" ,
coordinates: [ 18.639, 54.360 ] } },
$maxDistance : 10000
} } )
db.geoJson.find( { loc : { $near :
{ $geometry :
{ type : "Point" ,
coordinates: [ 16.900, 52.399 ] } },
$maxDistance : 10000
} } )
db.geoJson.find( { loc : { $geoWithin :
{ $geometry :
{ type : "Polygon" ,
coordinates: [[[16.804190,54.821840], [19.247510,54.821840], [19.247510,53.644500], [16.804190,53.644500], [16.804190,54.821840]]] } }
} } )
Do zadania użyłem bazy listy 2,7 mln. słów do gier wg zasad dopuszczalności SJP.pl (Słownik Języka Polskiego)
kodowanie pliku: win-1250 DOS-owe
zmiana kodowania z cp1250 na utf8
$ time iconv -f cp1250 -t utf8 slowa-win.txt slowa-unix.txt
real 0m0.310s
user 0m0.206s
sys 0m0.103s
przygotowałem plik do jsona za pomocą tego skryptu z tąd
$ time bash stringTojson2.sh slowa-unix.txt slowa.json
real 0m39.465s
user 0m9.717s
sys 0m27.452s
- mongodb
$ time mongoimport -d Zad2 -c Words < slowa.json
Sat Dec 28 15:20:29.613 check 9 2703812
Sat Dec 28 15:20:30.687 imported 2703812 objects
real 2m1.637s
user 0m22.379s
sys 0m2.206s
db.Words.aggregate({
$group: {
_id: { $substr: ['$word', 0, 1] },
count: { $sum: 1 }
}
})
Wyniki: JSON
var words = db.Words.find();
max = 0;
min = 0;
dl_all = 0;
words.forEach(function(word) {
if(word.word.length > max) {
if(min == 0) min = word.word.length;
max = word.word.length;
}
dl_all += word.word.length;
});
print(tojson("Najkrótsze słowo: "+min));
print(tojson("Najdłuższe słowo: "+max));
print(tojson("Długość wszystkich słów: "+dl_all));
print(tojson("Średnia długość słowa: "+(dl_all/words.count())));
Wyniki: JSON
- elasticsearch