Engagierte, facettierte Suchmaschine für den Umgang mit dynamischen Taxonomien - hilft nur bei Performance oder auch Flexibilität?

8

Ich habe schon eine Weile darüber nachgedacht, eine typische E-Commerce-Seite mit eBay-ähnlicher Taxonomie und Attributen zu modellieren, die von einer bestimmten Produktkategorie abhängen.

Der erste Versuch bestand darin, zwischen der EAV- und Tabellen-pro-Klasse-DB-Vererbungsmodellierung zu wählen. Ich habe letzteres wegen der Leistung gewählt, aber was es bedeutete, eine spezielle Tabelle für jede spezifische Produktkategorie (Blatt im Kategoriebaum) mit spezifischen Kategorieattributen (wie Auflösung für Fernsehgeräte) zu erstellen, die als separate Spalte modelliert wurden.

Während der Ausführung ist diese Konfiguration nicht flexibel, wenn Sie den vorhandenen Kategorien Attribute hinzufügen oder neue Kategorien hinzufügen müssen. Für jede solche Änderung wird folgendes benötigt:

  • Tabelle ändern / erstellen
  • Neues Formular zum Filtern mit einer Kategorie nach bestimmten Attributen
  • Neuer Code zum Generieren von Datenbankabfragen zum Suchen und Filtern
  • Einige neue Viewmodels / DTOs und Ansichten zum Präsentieren von Produkten aus neuen Kategorien

Um mit dieser Komplexität fertig zu werden, denke ich, dass eine Art Meta-Darstellung dieser Attribute (auch außerhalb der Anwendung) in xml- oder sogar Excel-Dateien benötigt wird, so dass bei jeder Änderung der gesamte Code automatisch generiert werden kann. orm Abfragen, Anwendungscode, Vorlagen). So kann es bei der Entwicklung helfen, aber trotzdem sind Tests und zusätzliche Bereitstellung erforderlich.

An diesem Punkt habe ich gelernt, dass Ebay relational db für die Suche nicht wirklich verwendet und dass ihre Taxonomie so flexibel ist, dass sie ziemlich schnell neue Blattkategorien hinzufügen können. Auch sind ihre Kategorien wahrscheinlich keine Kategorien aus einem hierarchischen Baum, der in relationalen db modelliert wurde, sondern nur Suchattribute (Facetten).

Nach einem kurzen Blick in die vielversprechendste dedizierte facettierte Suche (separate Solr-Instanz) bin ich nicht sicher, ob es mir dabei helfen könnte, Taxonomieänderungen flexibel zu gestalten, da Solr normalerweise nur relationale DB spiegelt, also bestimmte Kategorieattribute müssen im DB noch als DBMS-Metadaten modelliert werden, also z. dynamisch generierende UI-Formulare zum Filtern von Attributen wären schwierig, es sei denn:

1) Ich würde die Daten in RDBMS mit EAV-Modus behalten und seine Leistungsprobleme mit der SOLR-Suche überwinden (aber es würde immer noch Probleme mit EAV-Unordnung geben, keine Datenintegritätserzwingung usw.)

2) Ich würde nur das Attributverzeichnis (dh nur deren Namen und Typen) in RDBMS behalten und die spezifischen Attributwerte in SOLR speichern, indem ich es als eine Art nicht-relationalen Datenspeicher neben der Suchfunktion verwende. Ich bin auch von dieser Lösung nicht überzeugt (auch wenn es möglich ist), da die Anwendung mit solr eng gekoppelt wäre (dh, die Produktausgabe-Admin CRUD würde direkt mit SOLR interagieren).

Was sind deine Gedanken? Denken Sie, dass für jede Art von solcher (performanter) Taxonomie die Generierung von Flexibilitätscode unumgänglich ist? Wie würdest du damit umgehen? Vielleicht ein separates Datenwörterbuch in EAV-Mode in DB nur für die Code-Generierung? Ich denke, ich könnte auch etwas wie MongoDB verwenden, aber die UI-Code-Generierung (Laufzeit oder nicht) würde immer noch eine Art von Metadaten benötigen.

Es gibt viele Fragen hier, aber ich wollte es nicht in kleinere Fragen aufteilen, da ich an einem allgemeinen Designansatz interessiert bin, wenn es um eine größere Klasse solcher Probleme geht.

    
aaimnr 17.01.2010, 13:49
quelle

2 Antworten

2

Ich behaupte nicht, eine definitive Antwort auf all das zu haben (es ist eine ziemlich offene Frage, die Sie versuchen sollten, in kleinere Teile zu brechen, und es hängt von Ihren tatsächlichen Anforderungen ab, in der Tat bin ich versucht zu wählen um es zu schließen), aber ich werde ein paar Dinge kommentieren:

  1. Ich würde vergessen, dies auf einem RDBMS zu modellieren. Die facettierte Suche funktioniert in einem relationalen Schema nicht .
  2. IMO, das ist nicht der richtige Ort für die Code-Generierung. Sie sollten Ihren Code so entwerfen, dass er sich bei Datenänderungen nicht ändert (ich rede nicht von Änderungen schema ).
  3. Das Speichern von Metadaten / Attributen in einer Excel-Tabelle scheint eine sehr schlechte Idee zu sein. Ich würde eine Benutzeroberfläche erstellen, um dies zu bearbeiten, die auf Solr / MongoDB / CouchDB / was auch immer Sie gewählt haben, um dies zu verwalten.
  4. Solr nicht "nur relationale DB". Tatsächlich ist Solr völlig unabhängig von relationalen Datenbanken. Einer der häufigsten Fälle ist das Speichern von Daten von einem RDBMS zu Solr (das Denormalisieren von Daten im Prozess), aber Solr ist flexibel genug, um ohne relationale Datenquelle zu arbeiten.
  5. Hierarchische Facettierung in Solr ist immer noch ein offenes Thema in der Forschung. Derzeit werden zwei verschiedene Ansätze erforscht ( SOLR-64 , SOLR-792 )
Mauricio Scheffer 17.01.2010, 16:05
quelle
0

Was wäre, wenn Sie verschiedene Arten von Kategorien für verschiedene Arten von Produkten hätten?

Wenn wir das eBay-Beispiel verwenden, haben wir Produkte , die entweder Bücher oder TV / Displays sein können.

Bücher haben Titel und ISBN und können in der Kategorie sci-fi oder in der Kategorie erotisch oder in der Kategorie non-fiction oder autobiografisch sein. Oder vielleicht hast du ein Buch, das in den non-fiktiven, autobiographischen erotischen Kategorien steht.

Displays haben Bildschirmauflösung und Wattverbrauch (?) und können in der Kategorie Flachbildschirm, CRT oder HD sein.

Aus rein relationaler Sicht könnte man vielleicht das so modellieren:

%Vor%

Anstatt attributes dependent on a particular product category zu modellieren, hätten Sie abhängig von type / class des Produkts andere Eigenschaften und Kategorien .

Siehe Supertypen & amp; Subtypen

    
Rafa 03.07.2012 20:33
quelle