Ein reales Beispiel für ein Problem Ich hätte keine Ahnung, wie ich es mit SQL und einer relationalen Datenbank allein auf vernünftige Weise lösen könnte (vielleicht meine Schuld).
Wir haben also eine (gemeinsame relationale) Datenbank mit ungefähr 30.000 Produkten. Bisher nichts Großes. Jedes dieser Produkte hat viele Eigenschaften. Es gibt die gängigen wie Gruppe (Kabel, Antennen, iPhone-Hüllen ... ca. 80), Sortiment (irgendwie ähnlich wie Gruppen: Auto, Hifi, MP3, nur 15), Marke (30).
Dann kommen die technischen Daten. Jeder Artikel hat viele davon wie Farbe, Kabellänge, Gewicht, Volumen. etwa 200 solcher Werttypen und Tausende von Werten.
Und das komplizierteste: Viele dieser Produkte gehören entweder zu einem Autotyp (oder zu mehreren von ihnen) oder zu einem mobilen Gerät. Diese kommen in Hierarchien in der Form wie: Marke (Apfel) Modell (iPad) Typ (1,2,3,4) und in einigen Fällen Generation. (Für Autos ist es ähnlich, obwohl wir anstelle der Generation Jahre gebaut haben)
Problem Schritt Eins:
Wir möchten die Anzahl der Produkte für jedes dieser Attribute. Wie viele sind rot? Wie viele sind in der Kabelgruppe? Und so weiter.
Dies könnte teilweise mit SQL gelöst werden. Es wäre eine Menge Fragen und ziemlich hässlich, aber ich denke möglich. Vielleicht langsam, aber wir könnten es noch hässlicher machen und die Zähler in jeder Tabelle behalten und bei jeder Änderung aktualisieren. Besonders schwierig bei solchen Attributen, bei denen ein Produkt mehrere haben kann (wie bei iPhone und 12 anderen Mobiltelefonen)
Aber hier kommt Problem Schritt zwei:
Wenn ein Kunde ein Attribut auswählt (sagen wir, er möchte nur Produkte sehen, die rot sind), möchten wir alle diese Zähler in Echtzeit aktualisieren. Dies bedeutet, dass wir entweder extrem komplizierte Abfragen haben würden (wahrscheinlich sowieso nicht schnell genug) oder Zähler für mögliche Kombinationen von Attributen (Milliarden) behalten würden.
Als ich mit diesem Projekt anfing, hatten sie die Zähleroption ausprobiert und dies für eine sehr kleine Teilmenge von Attributen (Gruppe, Sortiment, Marke) getan. Der Code war hässlich, fehlerhaft und langsam. Außerdem hatten sie jetzt einen Tisch mit Theken, der viel größer war als der Produkttisch.
Die Verwendung der Facetten von Apache Solr war eigentlich die Lösung. Reduzieren Sie die Tabellen zu einer Liste von Dokumenten (eines pro Produkt), mit denen alle diese Daten in Echtzeit mit weitaus einfacheren Abfragen abgerufen werden können.