Dedicated facettierte Suchmaschine mit dynamischen Taxonomien für den Umgang - hilft nur mit Leistung oder auch flexibilty?

StackOverflow https://stackoverflow.com/questions/2081148

Frage

Ich habe für eine Weile darüber nachzudenken, Modellierung typische E-Commerce-Website mit ebay-wie Taxonomie und Attributen abhängig von einer bestimmten Produktkategorie.

Erster Versuch wurde zwischen EAV und Tabelle pro Klasse db Vererbungs Modellierung wählen. Ich habe letzteres wegen der Leistung gewählt, aber was bedeutete, dass es für jede spezifische dedizierte Tabelle erstellen (Blatt in der Kategoriebaum) Produktkategorie mit bestimmten Kategorie Attribute (wie Auflösung für TV-Geräte) als separate Spalte modelliert.

Während performant dieses Setup nicht flexibel ist, wenn Sie Attribute zu den bestehenden Kategorien müssen hinzufügen oder neue Kategorien hinzufügen. Für jede solche Änderung folgendes benötigt:

  • Alter / create table
  • Neue Form zum Filtern solchen Kategorie durch spezifische Attribute withing
  • Neuer Code zur Erzeugung von db-Abfragen für die Suche und Filterung
  • Einige neue Viewmodels / DTOs und Ansichten für Produkte aus den neuen Kategorien präsentiert

Zur Bewältigung dieser Komplexität denke ich, eine Art Meta-Repräsentation dieser Attribute benötigt wird (auch außerhalb der Anwendung) in XML oder sogar Excel-Datei, so dass alle genannten Code bei jeder Änderung automatisch generiert werden könnte (SQL / ORM-Abfragen, Anwendungscode, Vorlagen). So ist es mit der Entwicklung helfen kann, aber immer noch zu testen und zusätzlicher Einsatz erforderlich ist.

An diesem Punkt hat ich gelernt, dass ebay wirklich nicht relationalen db für die Suche verwenden, und dass ihre Taxonomie ist so flexibel, dass sie sehr schnell neue Endkategorien hinzufügen können. Auch ihre Kategorien sind nicht wahrscheinlich Kategorien von einem hierarchischen Baum in relationaler db modellierte, sondern nur Attribute (Facetten) suchen.

einen kurzen Blick in den meisten Nachdem viel versprechende gewidmet facettierte Suche Setup (eigene Solr Instanz) Ich bin nicht sicher, ob es mir in der Regel zu Taxonomie Veränderungen flexibel helfen könnte, da Solr nur Spiegel irgendwie relationale DB, würden so bestimmte Kategorie Attribute noch in DB als DBMS-Metadaten modelliert werden, so zB. dynamische Erzeugen UI Formulare für Attribute Filterung würde, es sei denn hart sein:

1) Ich würde die Daten in RDBMS halte EAV fasion verwenden und seine Performance-Probleme überwindet mit SOLR Suche mit (aber es würde immer noch Probleme mit EAV Unsauberkeit sein, ohne die Datenintegrität Durchsetzung usw.)

2) Ich halte würde nur die Attribute Wörterbuch (dh. Nur ihre Namen und Typen) in RDBMS und speichern Sie die spezifischen Attributwert in SOLR es als eine Art von nicht-relationalen Daten unter Verwendung speichern außer Suchfunktion. Ich bin nicht zu dieser Lösung überzeugt entweder (auch wenn es möglich ist), da Anwendung mit solr zu eng gekoppelt werden würde (dh. Produktedition Admin CRUD mit SOLR interagieren würde direkt).

Was sind Ihre Gedanken? Glauben Sie, dass für jede Art solcher (performant) Taxonomie Flexibilität Code-Generierung ist unvermeidlich? Wie würden Sie damit umgehen? Vielleicht dictionary einige separate Daten in EAV Art und Weise in DB nur für die Codegenerierung Zwecke? Ich glaube, ich auch so etwas wie MongoDB, aber die UI-Code-Generierung (Laufzeit oder nicht) würde immer noch eine Art von Metadaten verwenden könnte.

Es gibt viel Frage hier, aber ich wollte es nicht brechen in kleinere Fragen, seit ich in einem allgemeinen Design-Ansatz interessiert bin, wenn sie mit einer größeren Klasse von solchen Problemen zu tun.

War es hilfreich?

Lösung

Ich behaupte nicht, eine definitive Antwort auf all das haben (es ist eine ziemlich offene Frage, die Sie versuchen sollen, in kleinere Teile zu brechen und es hängt von Ihrem tatsächlichen Bedarf, in der Tat ich Abstimmung versucht, bin um sie zu schließen), aber ich werde auf ein paar Dinge Kommentar:

  1. Ich würde vergessen, dies über die Modellierung auf einem RDBMS. facettierte Suche nur nicht funktioniert in einem relationalen Schema .
  2. IMO ist dies nicht der richtige Ort für die Codegenerierung. Sie sollten Ihren Code entwerfen, damit es mit Datenänderungen ändert sich nicht (ich spreche nicht über Schema Änderungen).
  3. Speichern von Metadaten / Attribute auf einer Excel-Tabelle scheint wie eine sehr schlechte Idee. Ich würde eine Benutzeroberfläche zu bearbeiten bauen diese, die auf Solr gespeichert würden / MongoDB / CouchDB / was auch immer Sie wählen, diese zu verwalten.
  4. Solr nicht "spiegeln nur relationale DB". In der Tat ist Solr völlig unabhängig von relationalen Datenbanken. Einer der häufigsten Fälle is Daten von einem RDBMS zu Solr (Denormalisierung Daten im Prozess) Dumping, aber Solr ist flexibel genug, um Arbeit ohne relationalen Datenquelle.
  5. Hierarchical Facettierung in Solr ist noch eine offene Frage in der Forschung. Derzeit gibt es zwei unterschiedliche Ansätze erforscht ( SOLR-64 , SOLR-792 )

Andere Tipps

Was ist, wenn Sie verschiedene Arten von Kategorien für verschiedene Arten von Produkten hatten?

Unter dem eBay Beispiel müssten wir Produkte das kann entweder Bücher oder TV / Displays .

Bücher haben Titel und ISBN, und können in der Science-Fiction-Kategorie oder in der erotischen Kategorie oder in der nicht-Fiction-Kategorie oder autobiographisch Kategorie sein. Vielleicht haben Sie ein Buch, das in der non-fiction, autobiografisch erotische Kategorien.

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

Aus rein relationalen Sicht könnten Sie vielleicht Dieses Modell wie folgt:

[Product]-(1)------(1)-[  Book  ]-(n)------(m)-[ book_category ]
| id    |              | title  |              |  name         |
| price |              | ISBN   |
| ...   |
| ...   |-(1)---(1)-[   display  ]-(n)------(m)-[ display_category ]
                    | resolution |              |  name            |
                    |   watts    |

Statt attributes dependent on a particular product category der Modellierung, würden Sie unterschiedliche Eigenschaften haben und Kategorien abhängig von der / -klasse Produkt erhalten.

Siehe geordneten Typen und Subtypen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top