Έξυπνη Πρακτική ή τραγική Πρακτική λύση;;;

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
DeveloperGR
Δημοσιεύσεις: 67
Εγγραφή: 08 Νοέμ 2009 22:59

Έξυπνη Πρακτική ή τραγική Πρακτική λύση;;;

Δημοσίευση από DeveloperGR » 25 Μάιος 2010 03:27

Καλησπέρα ,

Εξετάζοντας διαφορα πράγματα για καλό optimize , σκέφτηκα την εξής τεχνική....Εαν θεωρήσω οτι σε ενα Web Site πρεπει σε κάθε Refresh να βλέπω τους ON LINE USERS ( ή αλλα Global Data ) η μια λύση ειναι για κάθε χρήστη να κάνω SELECT COUNT ( * ) ή αλλη λύση που εχω σκεφτεί ειναι να εχω ενα CRON Script κ ανα 5 λεπτά να τραβάω την SELECT COUNT ( * ) κ μετά να γράφω ενα .php script με τις Variables π.χ ενα Struct ενος Script θα ηταν το ακολουθο :

<?php
$OnLineUsers = 120;
...
?>

και μετά μέσω στον κωδικα μου θα μπορουσα να γράφω :

echo "On Line : " . $OnLineUsers ;

Ειναι καλή λύση αυτή , ώστε να μπορώ να έχω Global Shared Data ή υπάρχει περίπτωση να δημιουργηθούν άλλου είδους Προβλήματα ;;;

Άβαταρ μέλους
dimitrisdamo
Δημοσιεύσεις: 78
Εγγραφή: 19 Νοέμ 2009 20:00
Επικοινωνία:

Έξυπνη Πρακτική ή τραγική Πρακτική λύση;;;

Δημοσίευση από dimitrisdamo » 25 Μάιος 2010 03:32

θα ηθελα να κανω μια ερωτηση οταν λες CRON Script ?Τι ενοεις ? Ειμαι καινουριος στον προγραμματισμο ....
Επισης οταν λες Global Shared Data ,, ?
Αν σου ειναι ευκολο να μου εξηγησεις..
Ευχαριστω ...!

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

Έξυπνη Πρακτική ή τραγική Πρακτική λύση;;;

Δημοσίευση από fafos » 25 Μάιος 2010 04:10

DeveloperGR έγραψε:Καλησπέρα ,

Εξετάζοντας διαφορα πράγματα για καλό optimize , σκέφτηκα την εξής τεχνική....Εαν θεωρήσω οτι σε ενα Web Site πρεπει σε κάθε Refresh να βλέπω τους ON LINE USERS ( ή αλλα Global Data ) η μια λύση ειναι για κάθε χρήστη να κάνω SELECT COUNT ( * ) ή αλλη λύση που εχω σκεφτεί ειναι να εχω ενα CRON Script κ ανα 5 λεπτά να τραβάω την SELECT COUNT ( * ) κ μετά να γράφω ενα .php script με τις Variables π.χ ενα Struct ενος Script θα ηταν το ακολουθο :

<?php
$OnLineUsers = 120;
...
?>

και μετά μέσω στον κωδικα μου θα μπορουσα να γράφω :

echo "On Line : " . $OnLineUsers ;

Ειναι καλή λύση αυτή , ώστε να μπορώ να έχω Global Shared Data ή υπάρχει περίπτωση να δημιουργηθούν άλλου είδους Προβλήματα ;;;
1. to COUNT ( * ) einai lathos taktikh... vasanizeis thn vash eno mporeis aplos na kaneis count ena pedio tou table, px. COUNT (user)

2. opos to skeptesai den yfistatai online users alla ena fake online users afou gia 5 lepta tha deixnei ton idio arithmo... to count einai o synithismenos tropos, aplos prepei na prosexeis ta pedia pou tha kratoun tis online sessions kai na kaneis syxno optimize se auto to table logo tou poly svhse-grapse pou dexetai..

DeveloperGR
Δημοσιεύσεις: 67
Εγγραφή: 08 Νοέμ 2009 22:59

Έξυπνη Πρακτική ή τραγική Πρακτική λύση;;;

Δημοσίευση από DeveloperGR » 25 Μάιος 2010 04:31

Θα το θέσω διαφορετικά :

Έχω 10.000 On Line Users κ ανα 1 λεπτο θέλω να ξέρω το πλήθος που ειναι ειναι on Line....Τι ειναι προτειμοτερο να κάνω 10.000 Requests στην βαση ή να κάνω μια φορα το request αυτο κ να γράψω σε .php script ως μεταβλητή την τιμή που θα προκύψει;;; με τον τρόπο που λέω στην ουσια θα ειναι σαν να εχω shared Variables στην PHP.....

nbc
Honorary Member
Δημοσιεύσεις: 526
Εγγραφή: 05 Σεπ 2009 20:12
Επικοινωνία:

Έξυπνη Πρακτική ή τραγική Πρακτική λύση;;;

Δημοσίευση από nbc » 25 Μάιος 2010 10:45

Το count(*) σε MyIsam tables είναι πάντοτε optimized και ο χρόνος απόκρισης constant, καθώς το engine cacheάρει το row count. Η συμπεριφορά του count(column) εξαρτάται από το column. Αν είναι NULL, τότε η MySQL θα κάνει full table (ή index) scan καθώς θα πρέπει να αφαιρέσει τις NULL τιμές από το άθροισμα. Αν είναι NOT NULL, τότε ο χρόνος είναι ο ίδιος. Συνεπώς, το count(*) είναι ο safe τρόπος.

Σε InnoDB αρχεία η κατάσταση είναι διαφορετική. Επειδή αυτό το engine υποστηρίζει row locking και transactions, δεν μπορεί να cacheάρει το row count. Συνεπώς, το count(*) είναι πάντα αργό, αλλά εξακολουθεί να είναι προτιμότερο από το count(column) όταν έχει οριστεί ως NULL.


@DeveloperGr, στην εφαρμογή που ...ονειρεύεσαι, λύσεις τύπου memcached αποτελούν κλειδιά στην αρχιτεκτονική του συστήματος. Όλα τα άλλα είναι σε κουβέντα να βρισκόμαστε.

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Έξυπνη Πρακτική ή τραγική Πρακτική λύση;;;

Δημοσίευση από dva_dev » 25 Μάιος 2010 11:23

Μια quick 'n' dirty λύση είναι να κάνεις cache τα αποτελέσματα κάθε χ δευτερόλεπτα (π.χ. 300)
Μπορείς στο php αρχείο σου να βάλεις κάτι του στυλ:

Κώδικας: Επιλογή όλων

<?php
....
$cache_file = 'online_users_data.php';
$cache_life = '300'; //cache for 300 seconds

if &#40;!file_exists&#40;$cache_file&#41; or &#40;time&#40;&#41; - filemtime&#40;$cache_file&#41; >= $cache_life&#41;&#41;&#123;
    //κώδικας που υπολογίζει τους online users και γράφει στο cache αρχείο κάτι
    //του στύλ&#58; <?php $online_users = XXX; ?>
&#125;

include&#40;$cache_file&#41;;

echo "Online now $online_users";
...
&#125;
?>

Άβαταρ μέλους
dimitrisdamo
Δημοσιεύσεις: 78
Εγγραφή: 19 Νοέμ 2009 20:00
Επικοινωνία:

Έξυπνη Πρακτική ή τραγική Πρακτική λύση;;;

Δημοσίευση από dimitrisdamo » 25 Μάιος 2010 14:10

καμια απαντηση για μενα ? :P :P

Άβαταρ μέλους
vcore
Δημοσιεύσεις: 354
Εγγραφή: 20 Δεκ 2003 01:19
Τοποθεσία: Crete
Επικοινωνία:

Έξυπνη Πρακτική ή τραγική Πρακτική λύση;;;

Δημοσίευση από vcore » 25 Μάιος 2010 14:57

dimitrisdamo έγραψε:καμια απαντηση για μενα ? :P :P
1. http://en.wikipedia.org/wiki/Cron

2. Καθολικές μεταβλητές που κουβαλάνε δεδομένα και που είναι γνωστές σε όλο το"έργο" και μπορούν να κληθούν από όποιο σημείο του έργου σου θές.
Easy CMS
------------
Το να ζητάς βοήθεια δεν σημαίνει ότι είσαι εξαρτημένος.


Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

Έξυπνη Πρακτική ή τραγική Πρακτική λύση;;;

Δημοσίευση από cherouvim » 25 Μάιος 2010 15:56

Για το count το καλύτερο στη περίπτωση σου είναι το count(*).
http://www.mysqlperformanceblog.com/200 ... s-countcol

Για το caching, ναι σωστά το σκέφτεσαι, αλλά μην γράψεις σε αρχείο αλλά σε ένα key/value table στη βάση από όπου θα μπορείς να κάνεις πολύ γρήγορο retrieve. Για αρχή αυτό είναι αρκετό και όταν (με το καλό) θα γίνει bottleneck αυτό το table δες και το memcached.

DeveloperGR
Δημοσιεύσεις: 67
Εγγραφή: 08 Νοέμ 2009 22:59

Έξυπνη Πρακτική ή τραγική Πρακτική λύση;;;

Δημοσίευση από DeveloperGR » 25 Μάιος 2010 17:26

nbc 'σαι ωραιος! κάτι τέτοιο έψαχνα...!

Το έχεις κάνει ποτέ use ;;;; Εχει όντως τοσο θετικα αποτελέσματα ;;;

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες