Was ist die fundmental Unterschied zwischen MongoDB / NoSQL ermöglicht das schnellere aggregation (MapReduce) im Vergleich zu MySQL
Gruß!
Ich habe Folgendes problem. Ich habe eine Tabelle mit riesigen Anzahl von Zeilen die ich brauche, um Suche und dann Gruppe Suche Ergebnisse durch viele Parameter. Lassen Sie uns sagen, in der Tabelle ist
id, big_text, price, country, field1, field2, ..., fieldX
Und wir laufen eine Anfrage wie diese
SELECT .... WHERE
[use FULLTEXT index to MATCH() big_text] AND
[use some random clauses that anyway render indexes useless,
like: country IN (1,2,65,69) and price<100]
Wir werden als Suchergebnisse angezeigt werden, und dann müssen wir diese Suchergebnisse und gruppieren Sie Sie durch eine Anzahl von Feldern zu erzeugen Suchfilter
(results) GROUP BY field1
(results) GROUP BY field2
(results) GROUP BY field3
(results) GROUP BY field4
Dies ist ein Vereinfachtes Beispiel dafür, was ich brauche, ist die eigentliche Aufgabe bei der hand ist, noch problematischer ist, dass zum Beispiel manchmal die Ergebnisse der ersten Abfrage funktioniert auch seiner eigenen FRAKTION DURCH. Und Beispiel für eine solche Funktionalität wäre diese Website
http://www.indeed.com/q-sales-jobs.html
(Suche-Ergebnisse sowie Filter auf der linken Seite)
Ich getan habe und noch tun einem tiefen Forschung auf, wie MySQL-Funktionen und an diesem Punkt bin ich vollkommen sehe das nicht möglich in MySQL. Grob gesprochen MySQL-Tabelle ist nur ein Haufen Zeilen liegen auf HDD und Indizes sind kleine Versionen dieser Tabellen sortiert nach dem index-Feld(s) und zeigt auf die tatsächlichen Zeilen. Das ist eine super starke Vereinfachung natürlich, aber der Punkt ist, ich weiß nicht, wie es möglich ist, dies überhaupt zu beheben, wie z.B. der Verwendung von mehr als einem index, in der Lage sein zu tun schnell GRUPPE DURCH-s (zur Zeit der Abfrage erreicht GROUP BY-index ist völlig nutzlos, weil der Bereich sucht und andere Dinge). Ich weiß, dass MySQL (oder ähnliche Datenbanken) haben verschiedene hilfreiche Dinge wie index zusammengeführt, lockere index durchsucht und so, aber das ist einfach nicht angemessen - die Abfragen oben wird noch ewig dauern, bis auszuführen.
Mir wurde gesagt, dass das problem gelöst werden können, NoSQL, die radikal neue Möglichkeiten der Speicherung und den Umgang mit Daten, einschließlich der aggregation von Aufgaben. Was ich wissen möchte ist, einige kurze, schematische Erklärung, wie es dies tut. Ich meine, ich will nur einen kurzen Blick auf Sie, so dass ich wirklich sehen konnte, dass es funktioniert, weil im moment kann ich nicht verstehen, wie es möglich ist, zu tun. Ich meine, die Daten sind immer noch Daten und im Speicher und Indizes sind immer noch Indizes mit all Ihrer Einschränkung. Wenn dies in der Tat möglich ist, werde ich dann anfangen zu studieren, NoSQL im detail.
PS. Bitte erzählen Sie mir nicht, zu gehen und Lesen Sie ein großes Buch über NoSQL. Hab ich schon gemacht, dieses für MySQL, nur um herauszufinden, dass es nicht brauchbar in meinem Fall 🙂 Also ich wollte einen vorläufigen Verständnis der Technologie vor dem aufstehen ein großes Buch.
Dank!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es gibt im wesentlichen 4 Arten von "NoSQL", aber drei von vier sind wirklich ähnlich genug, dass eine SQL-syntax geschrieben werden kann, auf die Oberseite (einschließlich MongoDB und es ist verrückt, query-syntax [und das sage ich, obwohl Javascript ist eine meiner Lieblings-Sprachen]).
Schlüssel-Wert-Speicher
Diese sind einfache NoSQL-Systeme wie Redis, sind im Grunde ein wirklich ausgefallenes hash-Tabelle. Sie haben einen Wert, den Sie möchten, zu bekommen, später, so ordnen Sie einer Taste und Dinge, die es in der Datenbank, können Sie nur die Abfragen von einem einzigen Objekt zu einer Zeit und nur einem einzigen Schlüssel.
Sie definitiv nicht wollen, diese.
Dokument-Storage -
Ist dies ein Schritt bis über Schlüssel-Wert-Speicher und ist, was die meisten Menschen reden, wenn Sie sagen, NoSQL (z.B. MongoDB).
Grundsätzlich sind diese Objekte mit einer hierarchischen Struktur (wie XML-Dateien, JSON-Dateien und jede andere Art von Struktur in computer science), aber die Werte der verschiedenen Knoten auf dem Baum indexiert werden können. Sie haben eine höhere "Geschwindigkeit" relativ zum traditionellen Reihe-basierten SQL-Datenbanken, die auf Nachschlagespalten, weil Sie Leistung verzichten auf den Beitritt.
Wenn Sie auf der Suche nach Daten in Ihrer MySQL-Datenbank aus einer einzigen Tabelle mit vielen Spalten (sofern es sich nicht um eine view/virtuelle Tabelle), und vorausgesetzt, Sie haben es richtig indiziert für die Abfrage (das kann Sie wirkliche problem hier), Dokument-Datenbanken wie MongoDB nicht geben Ihnen alle Big-O profitieren über MySQL, so dass Sie wahrscheinlich nicht wollen, zu migrieren, sich über für genau diesem Grund.
Columnar Storage
Diese sind wie die meisten SQL-Datenbanken. In der Tat, einige (wie Sybase) Durchführung einer SQL-syntax, während andere (Cassandra) nicht. Sie speichern die Daten in Spalten und nicht als Zeilen, also das hinzufügen und aktualisieren, die teuer sind, aber die meisten queries sind Billig, weil jede Spalte ist im wesentlichen implizit indiziert.
Aber, wenn Sie Ihre Abfrage kann nicht mit einem index, Sie sind in keine bessere Form mit einem Säulenartigen Speichern als eine normale SQL-Datenbank.
Graph-Storage -
Graph-Datenbanken erweitern über SQL. Alles, was dargestellt werden kann, durch die Graphentheorie, einschließlich der Schlüssel-Wert -, Dokumenten-Datenbank und SQL-Datenbank dargestellt werden können, durch eine graphdatenbank wie neo4j.
Graph-Datenbanken machen verbindet so Billig wie möglich (im Gegensatz zu Dokument-Datenbanken), um dies zu tun, aber Sie müssen, denn auch eine einfache "Zeile" Abfrage erfordern würde, viele joins abgerufen werden können.
Einen table-scan-Typ-Abfrage wäre wahrscheinlich langsamer sein als eine standard-SQL-Datenbank, wegen dem ganzen extra Verknüpfungen zum abrufen der Daten (gespeichert in einem separaten Mode).
Also, was ist die Lösung?
Haben Sie wahrscheinlich bemerkt, dass ich Ihre Frage nicht beantwortet, genau. Ich sage nicht "du bist fertig", aber das eigentliche problem ist, wie die Abfrage ausgeführt wird.
Schließlich, doch die genaue problem, das Sie versuchen zu lösen: text-Suche mit optionaler Filter-Parameter, ist mehr allgemein bekannt als
search engine
, und dort sind sehr spezialisierte engines zur Handhabung dieser besonderen problem. Ich würde empfehlen, Apache Solr zum ausführen dieser Abfragen.Grundsätzlich dump das Textfeld "filter" - Feld und der Primärschlüssel der Tabelle in Solr, lassen Sie es index das Textfeld, führen Sie Abfragen durch, und wenn Sie den vollständigen Datensatz nach Abfrage der SQL-Datenbank für die spezifischen index, die Sie von Solr. Es verwendet einige mehr Speicher und muss in einem zweiten Prozess, aber wird wahrscheinlich am besten suite Ihre Bedürfnisse, hier.
Warum der ganze text zu dieser Antwort?
Weil der Titel deiner Frage nicht wirklich etwas zu tun haben mit dem Inhalt Ihrer Frage, so antwortete ich, beide. 🙂