CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |
13.04.2015, 22:45:18
|
Anfänger
|
|
Registriert seit: Apr 2015
Alter: 34
Beiträge: 4
|
|
Filmdatenbank
Hallo zusammen,
bin gerade dabei eine Filmdatenbank zu erstellen. In der Tabelle Title habe ich Filme eingespeichert. Nach Füllen der Tabelle mit Filmen gab es noch keine Probleme. Die Suchfunktion war sehr performant. Dann habe ich Serien wie folgt in der selben Tabelle eingespeichert.
Bspw.
Title-ID Title Ref-Title-ID
1 Walking Dead 0
2 Walking Dead Staffel 1 1
3 Walking Dead Episode 1 2
4 Walking Dead Episode 2 2
5 Walking Dead Staffel 2 1
6 Walking Dead Episode 1 5
7 Walking Dead Episode 2 5
8 Toy Story 0
9 Monster AG 0
Nach Einspeichern der Serien hatte ich 40.000 Einträge, obwohl mit Ref-Title-ID=0 (Filme/Serien auf oberster Ebene, nach denen gesucht werden kann) nur ca. 2.500 waren. D.h. Staffeln und Episoden sind gewaltig viel. Dadurch ist die Performance beim Suchen schlecht.
Denkt ihr ich sollte eine Tabelle mit Filmen und eine mit Serien machen? Oder gar zwei getrennte Datenbanken? Bei letzterem müsste ich dann per Ajax parallel suchen lassen. Ajax verwende ich momentan gar nicht.
Habt ihr Ideen?
|
14.04.2015, 10:45:21
|
Member
|
|
Registriert seit: Mar 2004
Ort: wien
Beiträge: 512
|
|
AW: Filmdatenbank
Das Stichwort ist Normalisierung. Je nachdem, was du alles erfassen möchtest, können das einige Tabellen werden.
Bsp.
Tabelle Filmname
1 FName-ID
2 Titel
3 Studio
4 Staffel Nummer
5 Folge Nummer
Tabelle Art
1 Art-ID
2 Filmart (Serie, Spielfilm, Theater, Hörspiel etc)
Tabelle Schauspieler
1. Schauspieler-ID
2. Vorname
3. Nachname
4. ......
5. .....
In einer Ergebnistabelle setzt du dann alles zusammen.
Film_db
1. FName-ID
2. Art-ID
3. Schauspieler-ID
__________________
Gruss sys ;-)
Ich möchte wie mein Grossvater sterben, lächelnd und schlafend, nicht schreiend und weinend, wie sein Beifahrer.
|
14.04.2015, 13:10:51
|
Member
|
|
Registriert seit: Nov 2007
Beiträge: 843
|
|
AW: Filmdatenbank
Hi,
wie sieht denn deine Abfrage bisher aus?
Ansonsten *unterschreib* ich das was sysop schreibt!
Dein Tabellendesign ist mist.
MfG
CKaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
|
14.04.2015, 20:20:10
|
Anfänger
|
|
Registriert seit: Apr 2015
Alter: 34
Beiträge: 4
|
|
AW: Filmdatenbank
Hi danke für die Antworten
Folgende Tabellen habe ich:
Title
TitleActor
Actor
TitleDirector
Director
TitleGenre
Genre
und noch paar andere Tabellen die nebensächlich sind.
Spielfilme und Serien werde ich nun in Tabelle Title lassen. Die Staffeln zu einer Serie packe ich in eine neue Tabelle Season. Die Episoden in eine Tabelle Episode.
Wenn ich dann einen Select auf Title mit Left Join auf Season mache und Season-ID = 0/Null ist weiß ich, dass es sich um einen Spielfilm handelt und kann direkt den Link für die Folgeseite entsprechend aufbauen. Wenn es eine Serie ist wird der Link anders aufgebaut, da auf der Folgeseite erst einmal die Staffeln, danach auf deren Folgeseite die Episoden und letztlich dann die Infos zur Episode dargestellt werden. Geht das? Irgendwie bin ich noch nicht ganz zufrieden. Alle Daten komplett in Title war schon schöner aber unperformanter...
Ich habe vor längerer Zeit schon einmal an einem ähnlichen Projekt gearbeitet. Die Tabelle war irgendwann so groß, dass Suchanfragen über den Titel eines Films schon mehrere Sekunden gedauert haben (Select über VARCHAR-Feld 255 Zeichen). Deswegen habe ich nun mal zum Test eine indexTitle-Tabelle erstellt, in der zu jedem Wort, was in einem Titel vorkommen kann, die Title-ID in einem JSON-Array abgelegt wird. So werden bei einer Suchanfrage die Wörter in der indexTitle-Tabelle gesucht und deren JSON-Arrays mit den Title-ID's zur Suche in der Tabelle Title verwendet. Am Anfang macht das denke ich keinen Unterschied. Erst wenn die Tabelle wächst wird man das spüren. Was denkt ihr?
|
15.04.2015, 02:13:54
|
Member
|
|
Registriert seit: Nov 2007
Beiträge: 843
|
|
AW: Filmdatenbank
Hi,
Zitat:
(Select über VARCHAR-Feld 255 Zeichen)
|
Wahrscheinlich wie viele am Anfang mit LIKE :/ und
noch schlimmer mit 2x %
Zitat:
So werden bei einer Suchanfrage die Wörter in der indexTitle-Tabelle gesucht und deren JSON-Arrays mit den Title-ID's zur Suche in der Tabelle Title verwendet.
|
Wie stellst du dir dann eine Suche nach "Fast" & "Furios" vor?
Jedes liefert ein Array und dann weiter vergleichen?
Schau dir mal das hier an LINK
BTW: Wie wäre es dein Projekt vielleicht mit imdb.com zu verbinden?
oder mit Amazon als Such und Ergebnislieferant?
Ich habe für ein anderes Projekt ebenfalls Amazon mitbenutzt als SE,
also Suche über Amazon API -> Ergebnisse (ASIN von Amazon) vergleichen
mit eigener DB. So kann man auch Verkaufsprovision einkassieren ;)
MfG
CKaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
|
16.04.2015, 00:23:49
|
Anfänger
|
|
Registriert seit: Apr 2015
Alter: 34
Beiträge: 4
|
|
AW: Filmdatenbank
Danke CKaos für die Antwort.
Ich suche dann in meiner indexTitle nach "Fast" hole mir die TitleID's aus dem JSON-Array. Das gleiche dann mit "&" und "Furious". Die Anzahl der gleichen gefunden TitleID's sind die wahrscheinlichsten Treffer und werden ganz oben positioniert.
Gesucht wird allerdings in indexTitle, wie du schon vermutet hast, mit
SELECT titleIdArr FROM indextitle WHERE term like '%massa%';
Ich würde künftig das Attribut 'term' indizieren mit FULLTEXT und im SELECT den MATCH/AGAINST nutzen. Wäre das sinnvoller?
IMDB prüfe ich ab und vervollständige meine Daten...
|
16.04.2015, 13:46:46
|
Member
|
|
Registriert seit: Nov 2007
Beiträge: 843
|
|
AW: Filmdatenbank
Hi,
Zitat:
SELECT titleIdArr FROM indextitle WHERE term like '%massa%';
|
Ganz schlecht, weil kein Index benutzt wird!
Das kann nur lahm sein, da gibt es keine zwei Meinungen.
Zitat:
Ich würde künftig das Attribut 'term' indizieren mit FULLTEXT und im SELECT den MATCH/AGAINST nutzen. Wäre das sinnvoller?
|
Schau dir den Link doch mal an ;)
MfG
CKaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
|
16.04.2015, 22:48:12
|
Anfänger
|
|
Registriert seit: Apr 2015
Alter: 34
Beiträge: 4
|
|
AW: Filmdatenbank
Hi den Link hatte ich schon von einer anderen Seite und ich würde das genauso umsetzen (Variante III - eigene Suchmaschine mit drei Tabellen).
Zitat:
Volltextsuche auf Basis eines Indizes mit allen Suchworten. Bei der vorherigen eingebauten MySQL Volltextsuche war das beim Erstellen der Tabelle mit dem Zusatz “fulltext” erledigt. Jetzt müssen wir uns da selber drum kümmern, gewinnen dadurch aber mehr Einfluss.
|
Ich setzte dann in der Suchwort-Tabelle auf das Attribut Suchwort einen Index mit Unique oder? Der Rest ist mir klar...
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Linear-Darstellung
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 20:17:54 Uhr.
|