Schrift
[thread]11618[/thread]

Mail-Benachrichtigung oder RSS ... (Seite 2)



<< |< 1 2 3 >| >> 23 Einträge, 3 Seiten
Hagen
 2008-04-22 16:26
#108729 #108729
User since
2007-09-06
233 Artikel
BenutzerIn
[default_avatar]
pq+2008-04-22 14:07:47--
1. unbedingt platzhalter verwenden im sql
2. boards, die nur für bestimmte gruppen sichtbar sind, müssen komplett raus, da du keine authentifizierung machst.


bzgl. 1.
Warum? Bisher habe ich mich mit dem Thema noch nicht so stark beschäftigt? Ich dachte, das macht nur Sinn, wenn innerhalb eines Scriptes die SQL-Anweisung mehrmals genutzt wird. Oder speichert die Datenbank das auch länger? Wo könnte ich denn dazu Detail-Informationen finden?

bzgl. 2. okay, habe ich übersehen :(
Also auf 'guest','user', reduzieren.

bzgl. join
Warum sind/sollten joins effektiver sein. Würde mich auch hier zu Hintergrundinformationen freuen, da sich mein SQL-Wissen auf DB-Abfragen erstellen beschränkt ... der Bereich Optimierung ist in Arbeit ...
Gruß
Hagen
renee
 2008-04-22 16:40
#108730 #108730
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Hagen+2008-04-22 14:26:58--
bzgl. 1.
Warum? Bisher habe ich mich mit dem Thema noch nicht so stark beschäftigt? Ich dachte, das macht nur Sinn, wenn innerhalb eines Scriptes die SQL-Anweisung mehrmals genutzt wird. Oder speichert die Datenbank das auch länger? Wo könnte ich denn dazu Detail-Informationen finden?


In diesem Wiki:Artikel steht warum ;-)
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Struppi
 2008-04-22 17:17
#108732 #108732
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Naja, du verknüpfst hier drei Tabellen und meines Wissens (ich bin kein DB Profi) wird dadurch die Datennmenge die mit where gefiltert u.U. wird größer. Im zweifelsfall hilft EXPLAIN weiter.

http://aktuell.de.selfhtml.org/artikel/datenbanken...

Aber vielleicht ist das auch nur ein persönliche Entscheidung, für mich sind joins irgendwie natürlicher, wenn man aus mehreren Tabellen zusammengehörige Daten miteinander verknüpft.
lux
 2008-04-23 08:06
#108769 #108769
User since
2007-09-15
104 Artikel
BenutzerIn
[Homepage]
user image
Hagen+2008-04-22 14:26:58--
pq+2008-04-22 14:07:47--
1. unbedingt platzhalter verwenden im sql

bzgl. 1.
Warum? Bisher habe ich mich mit dem Thema noch nicht so stark beschäftigt? Ich dachte, das macht nur Sinn, wenn innerhalb eines Scriptes die SQL-Anweisung mehrmals genutzt wird. Oder speichert die Datenbank das auch länger? Wo könnte ich denn dazu Detail-Informationen finden?


Datenbanken "berechnen" den optimalen Zugriffspfad (Benutzung von Indizes bzw. Tablescans) auf Daten. Diese Berechnung wird nur einmal durchgeführt, wenn Du parametriest, sie wird aber jedes Mal durchgeführt, wenn Du keine Platzhalter verwendest.

Gruß

Dirk
Blog - Podcast - Frau - Hunde
Schweizer Tastaturen kennen kein sz.
Hagen
 2008-04-23 11:30
#108771 #108771
User since
2007-09-06
233 Artikel
BenutzerIn
[default_avatar]
lux+2008-04-23 06:06:17--
Datenbanken "berechnen" den optimalen Zugriffspfad (Benutzung von Indizes bzw. Tablescans) auf Daten. Diese Berechnung wird nur einmal durchgeführt, wenn Du parametriest, sie wird aber jedes Mal durchgeführt, wenn Du keine Platzhalter verwendest.


Wie lange wird denn diese 'Berechnung' gespeichert?
Gruß
Hagen
pq
 2008-04-23 12:01
#108772 #108772
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
bei den platzhaltern geht es mir als erstes um sicherheit. wie schnell hat man mal vergessen,
bei einer variable alles unerwünschte zu entfernen. mit platzhaltern ist man da auf der
sicheren seite.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
lux
 2008-04-24 07:36
#108799 #108799
User since
2007-09-15
104 Artikel
BenutzerIn
[Homepage]
user image
Hagen+2008-04-23 09:30:05--
Wie lange wird denn diese 'Berechnung' gespeichert?


Das hängt von der Datenbank und der Konfiguration ab.

Gruß

Dirk
Blog - Podcast - Frau - Hunde
Schweizer Tastaturen kennen kein sz.
Hagen
 2008-04-24 13:09
#108807 #108807
User since
2007-09-06
233 Artikel
BenutzerIn
[default_avatar]
lux+2008-04-24 05:36:30--
Hagen+2008-04-23 09:30:05--
Wie lange wird denn diese 'Berechnung' gespeichert?

Das hängt von der Datenbank und der Konfiguration ab.


Kannst du mir mal ein Stichwort geben, wonach ich dafür suchen muss? Mich würde das vor allem für eine MySQL-DB interessieren.

Bzgl. den Joins in der DB-Abfrage für den RSS-Feed habe ich nichts gefunden, ob die besser sind oder nicht.

Die Abfrage habe ich wie folgt geändert:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
### SQL ###
        my $sql = "SELECT boards.id as board_id, threads.id as thread_id, messages.position as position, boards.name as board_name, threads.title as thread_title, messages.message_raw as message_raw";
        $sql .=   " FROM $PBoard::Config::DbTables{boards} AS boards,";
        $sql .=   " $PBoard::Config::DbTables{threads} as threads,";
        $sql .=   " $PBoard::Config::DbTables{messages} as messages,";
        $sql .=   " $PBoard::Config::DbTables{user_groups} as user_groups";
        $sql .=   " WHERE messages.thread = threads.id AND threads.boardID = boards.id";        
        $sql .=   " AND messages.status != 'deleted' AND threads.status != 'onhold' AND threads.status != 'deleted'";
        $sql .=   " AND boards.groupRequired <= 2 AND user_groups.level = 'user'";
        $sql .=   " AND boards.id = ?" if $board_id;
        $sql .=   " AND threads.id = ?" if $thread_id;
        $sql .=   " AND messages.authorId = ?" if $user_id;
        $sql .=   " AND ((UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(messages.posttime)) <= (? * 24 * 60 * 60))" if lc($action) eq lc('lastMessagesDays');
        $sql .=   " AND messages.position = '1'" if lc($filter) eq 'no_replies';
        $sql .=   " ORDER BY messages.posttime DESC";
        $sql .=   " LIMIT ?";

        my @placeholders;
        push @placeholders, $board_id       if $board_id;
        push @placeholders, $thread_id      if $thread_id;
        push @placeholders, $user_id        if $user_id;
        push @placeholders, $last_entries   if lc($action) eq lc('lastMessagesDays');
        if (lc($action) eq lc('lastMessagesDays'))        { push @placeholders, $max_entries; } # if
        elsif (lc($action) eq lc('lastMessagesNumbers'))  { push @placeholders, $last_entries; } # if
        else                                              { push @placeholders, $max_entries; } # ifelse

        if ($debug) {
                print "\n\n$sql\n\n";
                foreach my $item (@placeholders) { print "-->".$item."\n";      
                } # foreach
        } # if

### DB ###
        my $storage = PBoard::Storage->new( { dbh => undef } );
        my $poard = PBoard->new( { cgi => $cgi, storage => $storage } );
        my $dbh = PBoard::DB::ConnectToDB( $poard );
        $storage->set_dbh( $dbh );
        my $sth = &PBoard::DB::FireSql( $poard, $sql, @placeholders );

### Feed erzeugen ###


Also die Abfrage nach 'groupRequired' und die Platzhalter wurden ergänzt.


Zusätzlich habe ich am Anfang noch
Code (perl): (dl )
1
2
3
        # thread_id prüfen
        $thread_id = 0 if ($thread_id !~ m|^[0-9]*$|) || ($thread_id < 0);
        $board_id = 0 if $thread_id;
eingefügt (Zeile 3).
Gruß
Hagen
lux
 2008-04-25 14:41
#108856 #108856
User since
2007-09-15
104 Artikel
BenutzerIn
[Homepage]
user image
Hagen+2008-04-24 11:09:11--
Kannst du mir mal ein Stichwort geben, wonach ich dafür suchen muss? Mich würde das vor allem für eine MySQL-DB interessieren.


Guck Dir bitte einmal die beiden folgenden URLs an, Stichwort für eine Suche war "prepared statements".

http://dev.mysql.com/doc/refman/5.1/en/sqlps.html
http://dev.mysql.com/doc/refman/5.1/en/query-cache...

Es kommt wohl leider auch noch auf die Version an.

Hagen+2008-04-24 11:09:11--
Bzgl. den Joins in der DB-Abfrage für den RSS-Feed habe ich nichts gefunden, ob die besser sind oder nicht.


Hast Du Dir einmal einen "explain" des statements angeschaut?

Gruss

Dirk
Blog - Podcast - Frau - Hunde
Schweizer Tastaturen kennen kein sz.
Hagen
 2008-04-29 14:43
#108990 #108990
User since
2007-09-06
233 Artikel
BenutzerIn
[default_avatar]
lux+2008-04-25 12:41:57--
Guck Dir bitte einmal die beiden folgenden URLs an, Stichwort für eine Suche war "prepared statements".

http://dev.mysql.com/doc/refman/5.1/en/sqlps.html
http://dev.mysql.com/doc/refman/5.1/en/query-cache...

Es kommt wohl leider auch noch auf die Version an.


Danke für den Hinweis!

lux+2008-04-25 12:41:57--
Hast Du Dir einmal einen "explain" des statements angeschaut?


Habe das ganze jetzt noch mal mehrmals mit Joins ausprobiert. Aber entweder ich habe den falschen Ansatz gewählt ... oder es gibt keinen Unterschied. Jedenfalls sind die Ergebnisse von 'Explain' immer die gleichen ... oder ich habe die sinnvolle Anwendung von joins nicht anwenden können.

In Zeile 9 hat sich aber noch ein Fehler eingeschlichen:

Code: (dl )
AND user_groups.level = 'user'


macht hier so keine Sinn.
Gruß
Hagen
<< |< 1 2 3 >| >> 23 Einträge, 3 Seiten



View all threads created 2008-04-10 10:33.