Καλημέρα σε όλους.
Έχω φτιάξει μια desktop εφαρμογή (τύπου αποθήκης προϊόντων) σε Java που αποθηκεύει τα δεδομένα σε ΒΔ MySQL.
Θέλω να φτιάξω την αντίστοιχη "επέκτασή" της για χρήση σε Android tables/smartphones ώστε να συγχρονίζουν
μεταξύ τους τις όποιες αλλαγές γίνονται στη ΒΔ.
Απ' ότι καταλαβαίνω θα χρειάζεται να τρέχει κάποιο web-service μέσω της desktop εφαρμογής και αυτό να
διαχειρίζεται το συγχρονισμό των συσκευών.
Απ' τα λίγα παραδείγματα που έχω δει, το web-service τρέχει με local-ip (π.χ. 192.168.1.100). Τι γίνεται όμως όταν
το web-service πρέπει να είναι προσβάσιμο "globally"; Ρυθμίζουμε ανάλογα το router μας;
Στην περίπτωση που 2 διαφορετικές συσκευές Android προσθέσουν/αφαιρέσουν το ίδιο προϊόν με ποια προγραμματιστική
τεχνική θα μπορούσα να διαχειριστώ το συμβάν; Π.χ. με Transaction Pools ή/και με κάτι άλλο;
Δεν έχω ασχοληθεί ποτέ ξανά με κάτι αντίστοιχο και θα ήθελα τη βοήθειά σας σε τι θέματα και συνδυασμό αυτών
θα πρέπει να κοιτάξω.
Επίσης, είμαι αρχάριος στο κομμάτι του Android development.
Εμφάνιση 1-12 από 12
-
29-04-15, 03:52 Βοήθεια για εφαρμογή με συγχρονισμό δεδομένων #1
-
29-04-15, 12:12 Απάντηση: Βοήθεια για εφαρμογή με συγχρονισμό δεδομένων #2
η εφαρμογη που εχεις κανει επικοινωνει κατευθειαν με τη βαση ή εχεις κανει API me post,get requests κτλ?
για την ταυτοχρονη αλλαγη στα δεδομενα,**υποθετω** οτι απο τη στιγμη ο σερβερ (λογικα) ξεκιναει καινουρις thread για καθε συνδεση θα μπορουσες να δοκιμασεεις με synchronized ktl...μπορει να γίνεται κ απο τη βαση (η postgresql αν θυμαμαι καλα εχει advisory locks για τετοιες καταστασεις)
δωσε ομως καμμια παραπανω πληροφορια τι ακριβως χρησιμοποιεις;;
-
29-04-15, 13:36 Απάντηση: Βοήθεια για εφαρμογή με συγχρονισμό δεδομένων #3
επικοινωνεί κατευθείαν με queries χρησιμοποιώντας το ΑΡΙ του JDBC driver για MySQL
τι ακριβώς πληροφορία θέλετε να σας δώσω; ευχαρίστως να σας πω
-
29-04-15, 15:57 Απάντηση: Βοήθεια για εφαρμογή με συγχρονισμό δεδομένων #4
-
29-04-15, 21:45 Απάντηση: Βοήθεια για εφαρμογή με συγχρονισμό δεδομένων #5
Καλησπέρα, σ' ευχαριστώ για την απάντησή σου.
Ενδιαφέρον τα link που μου παρέθεσες.
Θα κοιτάξω και αυτό για το Rest API, καθώς το ακούω για 1η φορά.
Άρα με web-service και θα εξάγω τα δεδομένα σε μορφή json για το android και αντίστοιχα το android όταν κάνει αλλαγές στη ΒΔ θα τις στέλνει στο web-service.
Για να γίνεται ο συγχρονισμός πρέπει και στις 2 εφαρμογές να υπάρχει κάποιο thread - daemon που θα ακούει για αλλαγές;
Μήπως υπάρχει κάποιο συγκεκριμένο API ή πρωτόκολλο συγχρονισμού γενικότερα (π.χ. bonjour) που θα βελτιστοποιούσε το αποτέλεσμα;
Επίσης, θα ήθελα να ρωτήσω το εξής.
Πάντα προσπαθουσα να βρω το βέλτιστο τρόπο για την ανάγνωση δεδομένων από τη ΒΔ. Αυτή τη στιγμή στη desktop εφαρμογή χρησιμοποιώ ένα thread για την
προβολή και διαχείριση του GUI και ένα άλλο για να εισάγει σε πίνακα (JTable) τις εγγραφές της ΒΔ. Η εισαγωγή γίνεται μέσα σε ένα do{...}while loop και την
κάθε εγγραφή την περνάει στον πίνακα. Το "πρόβλημα" με αυτό είναι ότι όταν ανοίγει το GUI της εφαρμογής ο πίνακας ναι μεν γεμίζει σχεδόν άμεσα (αναλόγως
και τις δυνατότητες του κάθε ΗΥ), αλλά δημιουργείται ένα "οπτικό εφέ" σαν να ξεδιπλώνει προς τα κάτω εκείνη τη στιγμή ο πίνακας.
Σε άλλες εμπορικές εφαρμογές, καθώς και στον MySQL Browser, o πίνακας εμφανίζεται άμεσα σαν να είναι ήδη έτοιμος. Μάλιστα δοκίμασα το MySQL Browser
και με αρχείο .sql 5000 εγγραφών, όπου και πάλι άνοιξε αμέσως χωρίς καμία καθυστέρηση.
Σκέφτηκα να το αλλάξω ώστε να διαβάζει πρώτα τις εγγραφές και μετά να εμφανίζει το GUI, αλλά έτσι έδινε την αίσθηση στο χρήστη ότι αργούσε να φορτώσει η
εφαρμογή διαβάζοντας τα δεδομένα κ ήταν εκνευριστικό. Άρα κάποιο "προβλημα" θα έχει ο κώδικάς μου ή δεν χρησιμοποιώ την ιδανικότερη λύση.
Έψαξα και για παραδείγματα για εισαγωγή δεδομένων από ΒΔ με Java queries, αλλά ότι βρήκα ήταν αυτό που χρησιμοποιούσα ήδη.
Προσπάθησα να διαβάσω τον κώδικα του MySQL Browser, αλλά δεν βρήκα καμία άκρη.
Μήπως υπάρχει κάποιος άλλος τρόπος για να γίνει αυτό;
-
30-04-15, 09:43 Απάντηση: Βοήθεια για εφαρμογή με συγχρονισμό δεδομένων #6
ναι καπως ετσι με το web service που λες, ουσιαστικα γινεται client agnostic..με οποια γλωσσα θες κανεις htttp requests στο server σου..ουσιαστικα servlet κανεις..
για τις υπολοιπες ερωτησεις ενα γενικοτερο σχόλιο:
καλυτερα θα ήταν να χρησιμοποιήσεις ενα framework τυπου Spring που ειναι λιγο τερας αλλα αν ψαξεις θα βρεις κ άλλες λύσεις τα οποια κανουν τη βρώμικη δουλεια για σένα (αναφερομαι στη ερώτηση για το poooling). επισης αν πας σε τετοια λύση to συνηθες ειναι να χρησιμοποιήσεις object relational mapper to οποιο κανει κ παλι πολύ βρώμικη δουλεια κ αν δεν σου αρκει τοτε γραφεις raw sql..για την ερωτηση περι ταυτοτοχρονης αλλαγης των ίδιων δεδομενων, θα σου πω το ίδιο, δες μήπως η βαση εχει καποιο lock. Αν κ το συγκεκριμενο πρόβλημα δεν το εχω αντιμετωπισει ποτε, σε τετοια framework υποθετω οτι θα ειναι κατι συνηθισμενο κ θα εχει τη λυση ήδη ενσωματωμενη.αν ταυτοποιουντε οι clients τοτε υποθετω οτι δε θα αφηνει να τον αλλαζουν ταυτοχρονα
τωρα για το προβλημα που λες οτι φαινεται σαν να ξεδιπλώνεται, αν ειδες οτι ειναι ο "σωστος" τρόπος για να το κανεις τοτε δεν μπορώ να φανταστω κατι, ξεκινας βημα βημα debbuger κ ο θεος μαζι σου
παντως δες κ "βοηθητικες" βασεις τύπου redis, ουσιαστικα cachareis συνηθισμενα ή συχνα queries στην memory based βαση αντι να κοπανας συνεχεια την κανονικη σου βαση με τα ιδια queries.
δες αυτο το μαθημα κ αν μπορεις καντο https://www.coursera.org/course/mobilecloudprogram κανουν αυτο ακριβως που θες με springΤελευταία επεξεργασία από το μέλος dimr : 30-04-15 στις 10:18.
-
30-04-15, 12:54 Απάντηση: Βοήθεια για εφαρμογή με συγχρονισμό δεδομένων #7
να συνοψίσω λίγο "πρόχειρα"...
1. το rest ουσιαστικά είναι μια μετεξέλιξη του Soap και wsdl;
2. θα χρειαστώ το rest api για το συγχρονισμό (client/server με http requests
3. για το θέμα concurrency στη ΒΔ μεταξύ πολλών χρηστών θα πρέπει να καταφύγω σε λύσεις τύπου hibernate, spring, κοκ..;
4. ο κώδικας για την ανάγνωση των εγγραφών απ' τη ΒΔ είναι ο "κλασσικός" που χρησιμοποιείται σ' όλα τα παραδείγματα που είδα, ίσως ο κώδικας που γεμίζω (προβάλω) στη συνέχεια τον JTable να μην είναι ο βέλτιστος...
5. μήπως ξέρεις τι πρωτόκολλο χρησιμοποιεί π.χ. το Viber και συγχρονίζει άμεσα τα μηνύματα μεταξύ των συσκευών που χρησιμοποιεί ο χρήστης; ώστε να καθήσω να διαβάσω σχετικά για να καταλάβω τη θεωρία τους
-
30-04-15, 14:58 Απάντηση: Βοήθεια για εφαρμογή με συγχρονισμό δεδομένων #8
1)υποθετω ναι δεν ειχα ασχοληθει ποτε με αυτα, το restful ειναι ουσιαστιka mια λιστα απο best practices.
2)den καταλαβαινω ακριβως τι εννοεις με το "συγχρονιμο", CRUD operations κανεις ουσιαστικα
3)απο περεμφερη frramework se python, υποθετω οτι θα εχει κατι concurrent modification exception..αλλα σου ειπα αν πας σε αυτη τη λυση μετα μπορεις να το κανεις με ταυτοποιημενους clients, resource owners..αλλα ας πουμε ναι θα σου λυσει το πρόβλημα..κ ξανα ψαξε αν η βαση που χρησιμοποιεις εχει λυσεις για αυτο το προβλημα.
4)ισως, για αυτο σου ειπα debugging αργα αργα, multithreading δεν ειναι κ το πιο ευκολο πραγματα στον κοσμο κ το debugging τους einai ακομα πιο δυσκολο...
5) οχι.. αν κανεις rest μπορεις να κανεις ενα client σε ανδροιδ κ ενα πχ σε javascript ή σε οποια γλωσσα θες. Αν kaaneis update καποιο resource στη βαση σου me android **παντα μεσω του restful api**, αμεσως μπαινοντας απο javascript apo ton browser, κανωντας get request οι αλλαγες θα φαίνονται..φυσικα δουλευουν κα αντιστροφα
νομιζω οτι εχεις μπερδευτει λιγο αν καταλαβαινω σωστα απο το 5.
δεν ξερω ακριβως πως δουλευει το viber, αλλα συνηθως...
οι clients δεν εχουν κατι που κανουν για να συχρονιζονται μεταξυ οπως το εννοεις. Απλα επικοινωνουν με τους σερβερ παιρνωντας resource representation των δεδωμενων του λογαριασμου σου, δλδ αλλαζουν σε ενα σημειο( τους σερβερ) κ μπορει να διαβαζωνται απο διαφορους clients.
python ξερεις;
αν χρησιμοποιεις facebook,twitter (ή οποια αλλη υπηρεσια χρησιμοποιεις ) googlare να βρεις τα api τους,παρε api keys, κ διαβασε τα endpoints που δινουν. γραψε ενα client που πχ ποσταρει μηνυμα στο timeline sou,αλλαξε τη φωτογραφια σου ή οτι αλλο θες..βρες μια βιβλιοθηκη σε java που σε βολευει για httprequests k χρησιμοποιησε την...(ρωταω για python γιατι εκει ειναι πιο ευκολο)..
-
30-04-15, 18:05 Απάντηση: Βοήθεια για εφαρμογή με συγχρονισμό δεδομένων #9
σ.σ.: έχω μπερδευτεί αρκετά γιατί δεν ξέρω από που να πιάσω το νήμα...
φίλε δυσκολεύομαι να σε "πιάσω" σε κάποια σημεία, αλλά ok i'll keep up
python δεν γνωρίζω και social media δεν χρησιμοποιώ
λέγοντας συγχρονισμό εννοώ όταν πχ κάποιος client (είτε η desktop ή η android εφαρμογή) κάνει κάποια αλλαγή στη ΒΔ αυτομάτως όλοι οι άλλοι συνδεδεμένοι clients να ενημερώνονται (κάπως...;; ) για την αλλαγή αυτή
π.χ.
α) τώρα έτσι όπως είναι ο κώδικας της εφαρμογής όταν ένας client αλλάξει μια εγγραφή στη ΒΔ οι υπόλοιποι clients θα βλέπουν την παλαιά τιμή της εγγραφής
σε web περιβάλλον αυτό ξέρω γίνεται αυτόματα ανανέωση με χρήση ajax, εδώ όμως;
β) και το χειρότερο είναι όταν ένας client σβήσει μια εγγραφή και κάποιος άλλος (που ακόμα βλέπει πως υπάρχει) τροποποιήσει μια τιμή της, τότε το query εκτελείται κανονικά χωρίς να πετάει η MYSQL κάποιο σφάλμα (και μου κάνει εντύπωση) και στο επόμενο update που κάνει το gui τον πίνακα η εγγραφή αυτή δεν υπάρχει (σαφώς)...
αυτό δεν έχει να κάνει με την εφαρμογή μου, αλλά με την ίδια την MySQL, καθώς το ίδιο σενάριο να κάνω και με τον MySQL Browser αυτό που μου αναφέρει είναι "Query returned no resultset".
"Κανονικά" δεν θα πρεπε να πετάει κάποιο warning ότι δεν υπάρχει η εγγραφή που προσπαθούμε να κάνουμε update με το συγκεκριμένο Id;
Εκτός κ αν "πρέπει" να ορίσω διαφορετικού τύπου ερώτημα που να ελέγχει τέτοιες περιπτώσεις..;;
Eπομένως ο κώδικας που επικοινωνεί με τη ΒΔ θέλει ολόκληρος ξήλωμα και να τον αντικαταστήσω με τεχνικές από τα APIs που μου πρότεινες;
Aπ' την εμπειρία σου με ποιο τρόπο έχεις δει να υλοποιείται σε εμπορικές εφαρμογές, τύπου crm κλπ;Τελευταία επεξεργασία από το μέλος djastral232 : 01-05-15 στις 00:58.
-
02-05-15, 16:43 Απάντηση: Βοήθεια για εφαρμογή με συγχρονισμό δεδομένων #10
-
09-05-15, 01:36 Απάντηση: Βοήθεια για εφαρμογή με συγχρονισμό δεδομένων #11
Μετά από ψάξιμο κ σκέψεις κατέληξα στην εξής "απλή" λύση για τα παραπάνω σενάρια:
Όταν ένα συνδεδεμένο πρόγραμμα client εκτελεί μια CRUD εντολή στη ΒΔ, τότε θα στέλνει κ ένα πακέτο ack σε έναν tcp-server? ή web-service? με τα στοιχεία της εγγραφής που άλλαξε/πρόσθεσε/διέγραψε (π.χ. περιγραφή, id, κλπ). Στη συνέχεια ο tcp-server? ή web-service? θα στέλνει ένα άλλο πακέτο σε όλους τους υπόλοιπους συνδεδεμένους clients ενημερώνοντάς τους να ανανεώσουν το GUI τους με τα νέα δεδομένα από τη ΒΔ (εκτελώντας πχ SELECT * FROM myDB_table) και με ένα pop-up παράθυρο με τα στοιχεία της ενέργειας που πραγματοποιήθηκε στη ΒΔ (π.χ. Προϊόν1 με id1 νέα τιμή 100€, Το προϊόν2 με id2 προστέθηκε/διαγράφτηκε στη/από ΒΔ, κλπ).
Έτσι εφόσον θα ανανεώνουν το GUI με τα νέα δεδομένα και θα βλέπουν ΟΛΟΙ τα ΙΔΙΑ, αυτό θα αποτελεί και τον μεταξύ τους "συγχρονισμό". Για την αντιμετώπιση των race-conditions έχω υλοποιήσει κώδικα με βάση την προσέγγιση pessimistic locking.
Νομίζω ότι (ίσως) αυτή είναι η πιο "απλή" υλοποίηση. Πιστεύετε ότι είναι σωστή η προσέγγισή μου; Μπορείτε να μου δώσετε κάποιες γενικές οδηγίες/κατευθύνσεις για την υλοποίησή του; Θα χρειαστώ tcp-server ή web-service, καθώς η εφαρμογή θα τρέχει και σε android συσκευές και ο tcp-server ή web-service θα πρέπει να είναι προσβάσιμος globally (όχι μόνο σε Intranet δίκτυο).
--- update ---
Λίγο μια βοήθεια
Που πρέπει να κοιτάξω;
Σε tcp-sockets, websockets ή webservices;Τελευταία επεξεργασία από το μέλος djastral232 : 09-05-15 στις 12:46.
-
11-05-15, 15:43 Απάντηση: Βοήθεια για εφαρμογή με συγχρονισμό δεδομένων #12
@dimr αν ακούς, μιας κ που το thread εξελίχτηκε σε μεταξύ μας συζήτηση, ποια είναι η άποψή σου έτσι όπως το σκέφτομαι σχετικά με το "συγχρονισμό"; Έχεις να προτείνεις κάτι καλύτερο, με τη χρήση πχ κάποιας νέας τεχνολογίας ΑΡΙ κλπ που πιθανώς να μην γνωρίζω;
Τέλος, απ' όσα διάβασα προτιμότερο είναι να χρησιμοποιήσω webservice (όπως προείπες), καθώς τα websockets χρησιμοποιούνται κυρίως για web-apps και για επικοινωνία μεταξύ browsers και web servers.
Παρόμοια Θέματα
-
Μια απορια σχετικα με συγχρονισμο
Από nikoslykos στο φόρουμ NovaΜηνύματα: 3Τελευταίο Μήνυμα: 16-01-15, 20:09 -
Βοήθεια για εφαρμογή script
Από paris1871 στο φόρουμ Unix - LinuxΜηνύματα: 2Τελευταίο Μήνυμα: 10-01-15, 18:33 -
Πρόβλημα με συγχρονισμό = ξεχνάμε VDSL
Από Ragnarokgr στο φόρουμ NovaΜηνύματα: 23Τελευταίο Μήνυμα: 09-09-14, 21:01 -
Πρόβλημα με συγχρονισμό
Από Geodim στο φόρουμ COSMΟΤΕΜηνύματα: 22Τελευταίο Μήνυμα: 13-07-14, 09:19 -
Στο Play Store σαν αυτόνομη εφαρμογή για συσκευές με KitKat η αναβαθμισμένη Google Camera
Από nnn στο φόρουμ ΕιδήσειςΜηνύματα: 89Τελευταίο Μήνυμα: 02-06-14, 09:37
Bookmarks