Giter Site home page Giter Site logo

nosql-2's Introduction

Martyna Krajnik, [email protected]

Nosql - zaliczenie

Rozwiązania zadań z przedmiotu Bazy NoSQL:

  1. Zaliczenie:
  • Neo4j
  • EDA
  1. Egzamin:
  • Aggregation Pipeline
  • MapReduce

Zadanie 2a

Parametry komputera:

Producent Dell
Model Optiplex 9030
Procesor Intel Core i5-4590S @ 3.00 GHz
Dysk 512 GB
Pamiec RAM 8 GB
System Windows 10
Typ systemu 64-bit
Mongo 3.0.7
Postgres 9.4.5
Python 3.5.0

Plik z danymi:

Plik RC_2015-01.bz2 zajmuje 5,07 GB (bajtów: 5 452 413 560). Wszystkich komentarzy/JSON-ów jest 53 851 542.

Rozpakowanie pliku

Użyty program 7zip

Czas: 13 minut

Miejsce zajete po rozpakowaniu: 29,4 GB (bajtów: 31 648 374 104)

Import

-- Mongodb Postgresql
Czas 33 minuty 45 minut
Zużycie zasobów Mongodb korzystalo z wszystkich procesorow jednoczesnie, dodatkowo nie zuzywalo przez caly czas trwania importu caly czas procesora i dysku na 100%. Korzystalo naprzemiennie z dysku / procesora. Pamiec poczatkowo rosla, az w koncu stanela na granicy 95-97 %. --
Łatwosc importu Używamy jednego polecenia Trzeba plik przeparsować, a potem za pomoca skryptu wrzucic do bazy.
Korzystanie z danych Kazdy komentarz ma swoje "atrybuty" z ktorych mozemy korzystać Wszystkie dane sa wrzucone do jednej kolumny typu data json

Import - Mongodb - szczególy

zdjecie1

Używamy komendy mongoimport do importu

zdjecie2

Jak widać, Mongo naprzemiennie korzysta z dysku/procesora. Nie wykorzystuje caly czas w 100% wszystkich zasobów.

zdjecie3

Podczas trawnia importu - Mongo wykorzystuje cala pamiec dostepna na komputerze, co oznacza, ze podczas trwania importu najlepiej odejsc od komputera i zrobic sobie kawe... Bo korzystanie z niego podczas importu jest strasznie uciazliwe. Tak jak wczesniej bylo widac, dysk/procesor dziala naprzemiennie - przez caly import.

zdjecie5

Jeszcze spojrzmy jak Mongo wykorzystuje procesory... Wielki + dla Mongo - wykorzystuje równomiernie procesory dostepne w komputzerze, nie obciaza tylko jednego.

zdjecie6

Import zakonczony powodzeniem, zaimportowano wszystkie rekordy

Import Postgres

Do importu Postgres musimy przygotować plik, trzeba zamienić apostrofy na inny znak np. spacje. Wtedy dopiero poprawnie zaimportuje sie do bazy. W PowerShellu używam polecenia:

get-content .\RC_2015-01 | %{$_ -replace "'"," "} > RC_2015-011

Teraz w Postgresie tworzymy tabele:

CREATE TABLE subreddits(
	id serial primary key,
	data json
);

Za pomoca skryptu w pythonie importujemy baze:

import psycopg2

def insert():
  plik = "/mnt/vb/RC_2015-01.json"
  conn = psycopg2.connect(
  database="moja",
  user="postgres",
  host="/tmp/",
  password="123456"
)
    cursor = conn.cursor()
    i = 1
    with open(plik, "rb") as file:
        for a in file:
            cursor.execute("INSERT INTO subreddits (data) VALUES ('%s')" % (a))
            i=i+1
            if  i % 10000 == 0:
                conn.commit()
    conn.commit()
    cursor.close()
    conn.close()

insert()

Zużycie zasobów:

zdjecie-post1

Postgres dziala podobnie jak Mongo - korzysta naprzemiennie z dysku/procesora, ale pamiec nie jest wykorzystywana w dokladnie 100%.

zdjecie-post2

Postgres równomiernie rozklada prace na kazdy z procesorow

Przykladowy rekord:

zdjecie-posrt2

Zadanie 2b

Zliczenie rekordów

MongoDB

mydb.myColl.count();

zdjecie7

Postgres

select count(*) from subreddits ; 

Zadanie 2c

Zapytania

-> Ile jest zarchiwizowanych plików

db.myColl.find({ "archived":"true" }).count();

zdjecie10

Jak widać... nie archiwizuja ;)

-> Przykladowy rekord

db.myColl.findOne();

zdjecie9

-> Suma punktów autora YoungModern

db.myColl.aggregate ([
  { $match: { "author": "YoungModern"  } },
  {  $group: { _id: "$author", total: { $sum: "$score"  } } }
])

zdjecie11

Zadanie 2d - Geojson

Przed pisaniem zapytań do bazy dopisany zostal indeks:

geo1

Miejscowosci oddalone o 10 km od Bolszewa:

> db.miasta.find({loc: {$near: {$geometry: {type: "Point", coordinates: [18.17585,54.618011]}, $maxDistance: 10000}}}).skip(1)

mapa1

Miejscowosci ktore maja w nazwie "Nowa"

Dodajemy indeks na pole "name" zeby w nim przeszukiwac:

db.miasta.createIndex( { name: "text" } )

Zapytanie:

db.miasta.find( { $text: { $search: "Nowa" } } )

mapa4

LineString z Wejherowa do Gdańska

db.miasta.find({"name":"Gdańsk"})
db.miasta.find({"name":"Reda"})
db.miasta.find({"name":"Rumia"})
db.miasta.find({"name":"Gdynia"})
db.miasta.find({"name":"Sopot"})

mapa3

Miejscowosci zawierajace slowo "Biała" majace id wieksze niz 1000000

db.miasta.find({ $and : [ {"_id": { $gt: 1000000}  } ,  { $text: { $search: "Biała" } }]})

mapa4

nosql-2's People

Contributors

mkrajnik avatar mkrajnik94 avatar projekt-zespolowy-2015 avatar

Watchers

James Cloos avatar mlipinski2 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.