Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 16 von 16

Thema: Multimedia Datenbank - Sinnvolle Indexe / Strukturen

  1. #11
    mmdbproject ist offline Neuer Benutzer
    Registriert seit
    15.11.2010
    Beiträge
    7

    Standard

    Hallo Liebe Community,

    nachdem nun etwas Zeit ins Land gegangen ist, habe ich mal wieder eine Frage.
    Ich bin für den Persistenz Controler, also eine Fassaden-Klasse der Persistenz-Schicht zur Anwendungs-Schicht zuständig.
    Nun fragen wir uns, was der eleganteste Weg ist, um entsprechnde Querys vorzubereiten.

    Szenario:
    Unser erster Prototyp soll die Suche nach "Meta Daten" eines Bildes ermöglichen. Diese Daten sind einige EXIF Daten, die von der Applikationsschicht aus dem Bild extrahiert worden sind.
    Jemand kann also z.B. nach allen Bildern suchen die 1024 * 768 Pixel groß sind, ODER vom Autor xy sind. Oder alle Bilder die 1024 * 768 Pixel groß sind UND vom Autor xy.
    Und genau da ist jetzt mein Problem:

    Wir könnten für jedes Meta-Datum eine findBy()-Methode anbieten (findByHeight(int high), findByWidth(int width, findByAuthor(String author)).
    Schön wäre es, wenn man die Ergebnisse bzw. die Querys, die durch diese Methoden ausgelöst werden, JOINEN könnte. Dann hätte man zumindest schonmal die UND verknüpfung wenn ejmand nach mehreren Meta Daten sucht.

    Eine Alternative wäre, die Apllikationsschicht ruft eine Methode findByMeta(Meta metaObject) auf, in der uns ein Objekt übergen wird, welches die gesuchten Paramter als Instanz-Attribut trägt.
    Dann müssten wir allerding irgendwie ganz umständlich daraus eine SQL-Query mit 'n' WHERE Bedingungen bauen, was meiner Meinung nach eine schlechte Lösung wäre.

    Wäre schön wenn mir jemand einen Denkanstoß liefern könnte

    MfG
    Norman
    Wir arbeiten übrigens mit JDBC!
    Geändert von mmdbproject (13.12.2010 um 21:35 Uhr)

  2. #12
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.056

    Standard

    Da waren sie wieder, die Probleme. Framework ...

    Nun, leztzten Endes muss das Framework die Anfragen so effizient wie möglich zusammenstellen und so wenig wie möglich Daten aus der DB lesen. Zuerst mal alle Daten holen und dann darin weiter suchen ist sehr ineffizient.

    Wie genau ihr das löst ... *oommmhhhhh* ;-)
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  3. #13
    mmdbproject ist offline Neuer Benutzer
    Registriert seit
    15.11.2010
    Beiträge
    7

    Standard

    So, habe heute den ganzen Tag dran gesessen und was benutzbares ist sogar bei rausgekommen.
    Inwiefern das ganze perfomant ist, wird sich erst herausstellen, wenn wir genügend TestDatensätze in der DB haben.
    Habe das Problem wie folgt "gelöst":

    Code:
            StringBuffer query = new StringBuffer("SELECT * FROM meta WHERE ");
            int whereclausecount = 0;
            
            //Wenn der Benutzer bei Artist eine Bedingung eingegeben hat
            if(meta.getArtist()!=null){
                query.append("artist LIKE '%"+meta.getArtist()+"%'");
                whereclausecount++;
            }
    
            //Wenn der Benutzer bei ImageHeight eine Bedingung eingegeben hat        
            if(meta.getImageHeight()>0.0){
                if(whereclausecount>0)
                    query.append(" AND ");
                query.append("imageheight="+meta.getImageHeight());
                whereclausecount++;
            }
    
            //Wenn der Benutzer bei ImageWidth eine Bedingung eingegeben hat  
            if(meta.getImageWidth()>0.0){
                if(whereclausecount>0)
                    query.append(" AND ");
                query.append("imagewidth="+meta.getImageWidth());
                whereclausecount++;
    
            }
            System.err.println(query);
            String sqlstmt = query.toString();
            resultSet = test.selectFromTable(sqlstmt);
    Somit ergibt sich, dass man die DB zumindest schonmal nach "artist", "imagewidth" und "imageheight" durchsuchen kann.
    Und das ganze ist ja beliebig erweiterbar...


    Würde euch das ganze gerne hier zeigen, habe nämlich eine JSP gebaut um das ganze zu testen. Leider bräuchtet ihr dazu einen SSH-Tunnel in unser FH Netzwerk, den ich euch leider nicht anbieten kann :P
    Aber wenn das ganze irgendwann mal richtig showreif & public ist, lassen wir euch gerne an unserem Ergebnis teilhaben!

    Gruß
    Norman
    Geändert von mmdbproject (14.12.2010 um 18:38 Uhr)

  4. #14
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.056

    Standard

    Eine Kleinigkeit: ich würde die einzelnen WHERE-Bedingungen in einem Array sammeln und das zum Schluß mittels " AND " joinen.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  5. #15
    mmdbproject ist offline Neuer Benutzer
    Registriert seit
    15.11.2010
    Beiträge
    7

    Standard

    Zitat Zitat von ads Beitrag anzeigen
    Eine Kleinigkeit: ich würde die einzelnen WHERE-Bedingungen in einem Array sammeln und das zum Schluß mittels " AND " joinen.
    like this?!

    Code:
            ArrayList<String> query = new ArrayList<String>();
            StringBuffer finalQuery = new StringBuffer("SELECT * FROM meta");
    
            if (meta.getArtist() != null) {
                query.add("artist LIKE '%" + meta.getArtist() + "%'");
            }
    
            if (meta.getImageHeight() > 0.0) {
                query.add("imageheight=" + meta.getImageHeight());
            }
    
            if (meta.getImageWidth() > 0.0) {
                query.add("imagewidth=" + meta.getImageWidth());
            }
    
            for (int i = 0; i < query.size(); i++) {
                if(i==0)
                    finalQuery.append(" WHERE ");
                finalQuery.append(query.get(i));
                if(i<query.size()-1)
                    finalQuery.append(" AND ");
            }
    Geändert von mmdbproject (15.12.2010 um 17:29 Uhr)

  6. #16
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.056

    Standard

    Schaut besser - und imho schlüssiger lesbar - aus.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. Problem varchar/text-spalten + >, < - operatoren + indexe
    Von symbiont im Forum SQL
    Antworten: 1
    Letzter Beitrag: 15.07.2009, 15:12
  2. Meine Indexe werden nicht verwendet...
    Von ipConfig im Forum SQL
    Antworten: 8
    Letzter Beitrag: 05.06.2009, 15:34
  3. limit/offset und indexe
    Von Stefan T im Forum SQL
    Antworten: 3
    Letzter Beitrag: 15.01.2008, 12:10
  4. Anfängerfragen zu Schemas und Strukturen
    Von Folke im Forum Allgemeines
    Antworten: 3
    Letzter Beitrag: 13.12.2006, 12:48
  5. Performance und Indexe
    Von OlliT im Forum Konfiguration
    Antworten: 14
    Letzter Beitrag: 03.05.2006, 14:17

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum