/Zadania-NOSQL

Zadania z laboratorium NOSQL

Primary LanguageShell

MongoDB version

MongoDB version: 2.5.2

Menu

Zadanie 1

Zadanie 2

Zadanie 1

  • 1a

Train

przygotowanie pliku

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

import

$ 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

zliczenie

db.Train.count()
6034195

Wynik: 6034195 czyli się zgadza

  • 1c

tagi na tablice

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

Text8

przygotowanie pliku

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

import do bazy

$ 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. htop htop

Screen z mms-a htop

zliczanie słó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

Geo Json

Do obróbki użyłem bazy listy Stacji Paliw Orlen Mapka

import do db

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"
}

Dodanie indexu

db.geoJson.ensureIndex({"loc" : "2dsphere"});

Koordynaty kilku miast w Polsce:

Warszawa 52.259, 21.020

Gdańsk 54.360, 18.639

Poznań 52.399, 16.900

Zapytania

Stacje w odległości do 10km od Warszawy:

db.geoJson.find( { loc : { $near :
                         { $geometry :
                             { type : "Point" ,
                               coordinates: [ 21.020, 52.259 ] } },
                           $maxDistance : 10000
              } } )

wyniki: JSON, Mapka

Stacje w odległości do 10km od Gdanska:

db.geoJson.find( { loc : { $near :
                         { $geometry :
                             { type : "Point" ,
                               coordinates: [ 18.639, 54.360 ] } },
                           $maxDistance : 10000
              } } )

wyniki: JSON, Mapka

Stacje w odległości do 10km od Poznania:

db.geoJson.find( { loc : { $near :
                         { $geometry :
                             { type : "Point" ,
                               coordinates: [ 16.900, 52.399 ] } },
                           $maxDistance : 10000
              } } )

wyniki: JSON, Mapka

Stacje na Pomorzu

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]]] } }
              } } )

wyniki: JSON, Mapka

Zadanie 2

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

przygotowanie pliku do importu

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

import do 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

zapytania mongodb

Ilość słów zaczynających się na daną literę alfabetu:

db.Words.aggregate({
  $group: {
    _id: { $substr: ['$word', 0, 1] },
    count: { $sum: 1 }
  } 
})

Wyniki: JSON

Najdłuższe słowo najkrótsze słowo długośc wszystkich słów i średnia długośc słowa:

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

import do elasticsearch

zapytania elasticsearch