JSON vs MongoDB
Δημοσιεύτηκε: 26 Απρ 2022, 17:50
Ποιος ο λογος να ταλαιπωριεσαι με MongoDB αντι να χρησιμοποιησεις ενα απλο JSON file και να κανεις data cleaning / relationships με pandas/numpy?
Καλώς ήρθατε στο Phorum.com.gr Είμαστε εδώ πολλά ενεργά μέλη της διαδικτυακής κοινότητας του Phorum.gr που έκλεισε. Σας περιμένουμε όλους!
https://www.phorum.com.gr/
εκει ειναι το ζουμι.foscilis έγραψε: ↑26 Απρ 2022, 17:58Η MongoDB όσο ελεεινή και να είναι, παραμένει βάση δεδομένων.
Μπορείς ας πούμε να δημιουργήσεις ένα Index πάνω στο πεδίο timestamp και αν τη ρωτήσεις να σου φέρει παπαριές που είναι μεταξύ 12:15 και 12:16 να στις βρει αμέσως. Αντίθετα το JSON file πρέπει να το σκανάρεις ολόκληρο για να βρεις αυτό που θες.
Ή μπορείς να της πεις "άλλαξέ μου την εγγραφή που έχει id τάδε, κάνε το πεδίο approved = true". Δεν είναι καθόλου το ίδιο πρακτικό να κάνεις το ίδιο στο JSON.
Επίσης ξέρει πώς να κάνει "οικονομία" στις ανάγκες της. Αν έχεις 1ΤΒ δεδομένα, τη Mongo δεν την πειράζει να δουλέψει με αυτά. Θα χρησιμοποιεί το φουλ της μνήμης σου βέβαια αλλά πολύ λιγότερα από 1ΤΒ, φροντίζοντας κάθε στιγμή να έχει το "καυτό" υποσύνολο των δεδομένων online. Ένα JSON file ή θα πρέπει να το σκανάρεις συνέχεια σα μαλάκας (α, πάω πίσω και ξαναξεκινάω από την αρχή να βρω αυτό το άλλο πράγμα που ήθελα) ή θα πρέπει να το φορτώσεις όλο σαν δέντρο στη μνήμη, αυτό θα κάνει το Pandas btw.
Ουσιαστικά είναι θέμα τι θες να κάνεις. Αν τα δεδομένα σου είναι λίγα σκοπεύεις να τα περάσεις μια κι έξω για να τρέξεις κάποια στατιστική ανάλυση, προφανώς δε συμφέρει να μπλέξεις με MongoDB. Αν είναι πολλά και σκοπεύεις να τα προσπελάσεις πολλές φορές ή να τα διευθυνσιοδοτήσεις, εντάξει δε θα σου πω βάλε mongo γιατί τη μισώ, αλλά σίγουρα θα πρέπει να κάνεις κάτι λίγο πιο ψαγμένο από ένα JSON file.
Βάση δεδομένων = λυμένα ένα σωρό προβλήματα (για την αποθήκευση και πρόσβαση στα δεδομένα), συχνά με αποτελέσματα δεκαετιών έρευνας και εμπειρίας που αλλιώς θα πρέπει να τα λύσεις εσύ και ΔΕΝ ξέρεις να το κάνεις τόσο καλά. Το τίμημα είναι βέβαια η πολυπλοκότητα, ότι έχεις ένα λογισμικό να διαχειριστείς και να ρυθμίσεις.
Συμπληρωματικά είναι αυτά, δεν είναι mutually exclusivetalaipwros έγραψε: ↑26 Απρ 2022, 17:50Ποιος ο λογος να ταλαιπωριεσαι με MongoDB αντι να χρησιμοποιησεις ενα απλο JSON file και να κανεις data cleaning / relationships με pandas/numpy?
ναι, δεν ειναι.Awesomatic έγραψε: ↑26 Απρ 2022, 19:20Συμπληρωματικά είναι αυτά, δεν είναι mutually exclusivetalaipwros έγραψε: ↑26 Απρ 2022, 17:50Ποιος ο λογος να ταλαιπωριεσαι με MongoDB αντι να χρησιμοποιησεις ενα απλο JSON file και να κανεις data cleaning / relationships με pandas/numpy?
Γιατρός δεν ήσουν κάποτε; Άλλαξες επάγγελμα;talaipwros έγραψε: ↑26 Απρ 2022, 19:05εκει ειναι το ζουμι.foscilis έγραψε: ↑26 Απρ 2022, 17:58Η MongoDB όσο ελεεινή και να είναι, παραμένει βάση δεδομένων.
Μπορείς ας πούμε να δημιουργήσεις ένα Index πάνω στο πεδίο timestamp και αν τη ρωτήσεις να σου φέρει παπαριές που είναι μεταξύ 12:15 και 12:16 να στις βρει αμέσως. Αντίθετα το JSON file πρέπει να το σκανάρεις ολόκληρο για να βρεις αυτό που θες.
Ή μπορείς να της πεις "άλλαξέ μου την εγγραφή που έχει id τάδε, κάνε το πεδίο approved = true". Δεν είναι καθόλου το ίδιο πρακτικό να κάνεις το ίδιο στο JSON.
Επίσης ξέρει πώς να κάνει "οικονομία" στις ανάγκες της. Αν έχεις 1ΤΒ δεδομένα, τη Mongo δεν την πειράζει να δουλέψει με αυτά. Θα χρησιμοποιεί το φουλ της μνήμης σου βέβαια αλλά πολύ λιγότερα από 1ΤΒ, φροντίζοντας κάθε στιγμή να έχει το "καυτό" υποσύνολο των δεδομένων online. Ένα JSON file ή θα πρέπει να το σκανάρεις συνέχεια σα μαλάκας (α, πάω πίσω και ξαναξεκινάω από την αρχή να βρω αυτό το άλλο πράγμα που ήθελα) ή θα πρέπει να το φορτώσεις όλο σαν δέντρο στη μνήμη, αυτό θα κάνει το Pandas btw.
Ουσιαστικά είναι θέμα τι θες να κάνεις. Αν τα δεδομένα σου είναι λίγα σκοπεύεις να τα περάσεις μια κι έξω για να τρέξεις κάποια στατιστική ανάλυση, προφανώς δε συμφέρει να μπλέξεις με MongoDB. Αν είναι πολλά και σκοπεύεις να τα προσπελάσεις πολλές φορές ή να τα διευθυνσιοδοτήσεις, εντάξει δε θα σου πω βάλε mongo γιατί τη μισώ, αλλά σίγουρα θα πρέπει να κάνεις κάτι λίγο πιο ψαγμένο από ένα JSON file.
Βάση δεδομένων = λυμένα ένα σωρό προβλήματα (για την αποθήκευση και πρόσβαση στα δεδομένα), συχνά με αποτελέσματα δεκαετιών έρευνας και εμπειρίας που αλλιώς θα πρέπει να τα λύσεις εσύ και ΔΕΝ ξέρεις να το κάνεις τόσο καλά. Το τίμημα είναι βέβαια η πολυπλοκότητα, ότι έχεις ένα λογισμικό να διαχειριστείς και να ρυθμίσεις.
Το pandas θα τα κανει ολα, και τα timestamps και τα groupby και τα lamda functions και ολα. Αν δεν ειναι multirelational οι αναζητησεις , ποσο αξια εχει το MongoDB ( δεν μας αφηνουν SQL) ;
Δεν θα το γλυτωσω τελικα , διοτι δεν ειναι αιτιολογια το "παπαρες ειμαι νιουφις τί με ζαλιζετε με tkinter και MongoDB, ενα απλο Data Munging και αναζητηση κανουμε, εχω δουλεια γυναικα και παιδια χεστε με", αλλα αν δεν προκαμω θελω να εχω μια critical thinking δικαιολογια καπου ετοιμη
μερσι
Αφού δεν σε υποχρεώνει για db τότε κάνε το όπως ξέρεις καλύτερα και γρηγορώτερα. Άλλωστε μικρό φαίνεται να είναι. Αν έχεις χιλιάδες εγγραφές αλλάζει.talaipwros έγραψε: ↑26 Απρ 2022, 19:31ναι, δεν ειναι.Awesomatic έγραψε: ↑26 Απρ 2022, 19:20Συμπληρωματικά είναι αυτά, δεν είναι mutually exclusivetalaipwros έγραψε: ↑26 Απρ 2022, 17:50Ποιος ο λογος να ταλαιπωριεσαι με MongoDB αντι να χρησιμοποιησεις ενα απλο JSON file και να κανεις data cleaning / relationships με pandas/numpy?
χοντρικα η ασκηση ειναι μας δινουν ενα CSV file, καντο κατι αλλο ( XML ή JSON ) και μετα κανε ενα app σε GUI( tkinder), και απο εκει , κανε αλλαγες και αποθηκευε - οπως νομιζεις αλλα οχι με SQL - μαζευε καποια στοιχεια, βγαλε στατιστικα ( με Pandas kai NumPy ) και κανε και διαγραμματα ( με Maplotlib +/- Seaborn).
αυτα χοντρικα ( + να κανω καποια σχολεια για thread και γιατι θα ηταν καλυτερα αν χρησιμοποιουσα Python Threads)
ευχαριστω για τις απαντησεις
το βασικο κομματι του Module ειναι Numpy/Pandasfoscilis έγραψε: ↑26 Απρ 2022, 19:30το Pandas δεν είναι αποτελεσματικός τρόπος να φορτώνεις πολλά δεδομένα. Το Pandas απλά αναλύει δεδομένα. Έχει readers ώστε να διαβάζει δεδομένα από διάφορες πηγές (και από αρχεία και από βάσεις) αλλά δεν είναι αυτή η δουλειά του, ούτε είναι όλοι οι readers το ίδιο καλοί. Και σίγουρα δε συγκρίνεται με την ευελιξία που σου δίνει μια καλή βάση δεδομένων.
Αν έχεις ένα CSV με 1.000.000 γραμμές και το περάσεις σε μια βάση, μπορείς να πεις "φέρε μου μια γραμμή, φέρε μου μια άλλη γραμμή, πήγαινε στη γραμμή 98" κλπ.
Αν φορτώσεις το ίδιο CSV σε Pandas, πρέπει να χωρέσουν 1.000.000 γραμμές στη μνήμη. Αυτό μπορεί να γίνεται μπορεί και όχι, αναλόγως τι έχει η γραμμή. Σίγουρα είναι πολύ πιο ευέλικτα τα πράγματα αν συνδέσεις το pandas με τη MongoDB (υπόψη δεν ξέρω αν γίνεται) και τραβάει ό,τι δεδομένα θέλει on demand.
Η ουσία είναι ότι πρόκειται για διαφορετικά πράγματα:
JSON: μορφή αρχείου που περιγράφει τον εαυτό της, καλό ας πούμε σαν ενδιάμεσο φορμά ώστε να μεταφέρεις δεδομένα μεταξύ διαφορετικών εργαλείων, αλλά με μεγάλο κόστος αποθήκευσης και επανανάγνωσης. Είναι μαλακία να το χρησιμοποιήσεις σαν random access αποθηκευτικό χώρο για πολλά δεδομένα.
pandas: βιβλιοθήκη ανάλυσης δεδομένων. Βασικά θα το χρησιμοποιήσεις για την κατεξοχήν στατιστική ανάλυση και ΟΧΙ για το τετριμμένο κομμάτι, ας πούμε μέσο όρο ή μοναδικές τιμές μιας στήλης μπορούν να σου υπολογίσουν τα πάντα, είναι μαλακία να μπλέξεις με pandas.
Mongo: βάση δεδομένων, αποθηκεύει δεδομένα με δομημένο τρόπο και επιτρέπει πολύ γρήγορη και αποτελεσματική ενημέρωση/διάσχιση/περίληψη κλπ. Είναι μαλακία να τη χρησιμοποιήσεις αν έχεις λίγα δεδομένα, όπως δε θα χρησιμοποιούσες Word Processor για να σημειώσεις 2 πράγματα που θες για ψώνια.
Αυτό που περιγράφεις, ο ΜΟΝΟΣ λόγος για να μην το κάνω σε pandas θα ήταν αν δεν χωρούσαν τα ντατα στη μνήμη (και κρασαρε στην πράξη δηλαδή, όχι θεωρητικά)talaipwros έγραψε: ↑26 Απρ 2022, 19:31ναι, δεν ειναι.Awesomatic έγραψε: ↑26 Απρ 2022, 19:20Συμπληρωματικά είναι αυτά, δεν είναι mutually exclusivetalaipwros έγραψε: ↑26 Απρ 2022, 17:50Ποιος ο λογος να ταλαιπωριεσαι με MongoDB αντι να χρησιμοποιησεις ενα απλο JSON file και να κανεις data cleaning / relationships με pandas/numpy?
χοντρικα η ασκηση ειναι μας δινουν ενα CSV file, καντο κατι αλλο ( XML ή JSON ) και μετα κανε ενα app σε GUI( tkinder), και απο εκει , κανε αλλαγες και αποθηκευε - οπως νομιζεις αλλα οχι με SQL - μαζευε καποια στοιχεια, βγαλε στατιστικα ( με Pandas kai NumPy ) και κανε και διαγραμματα ( με Matplotlib +/- Seaborn).
αυτα χοντρικα ( + να κανω καποια σχολεια για thread και γιατι θα ηταν καλυτερα αν χρησιμοποιουσα Python Threads)
ευχαριστω για τις απαντησεις