Wie kann ich filter über die Daten in Cassandra?
Ich habe mit mySQL eine app für einige Zeit, und je mehr Daten ich sammle, desto langsamer wird es. Also ich habe auf der Suche in NOSQL-Optionen. Eines der Dinge, die ich in mySQL ist eine Ansicht aus einer Reihe von joins. Die app zeigt alle wichtigen Infos in einem raster, und der Benutzer kann auswählen von Bereichen, tun, suchen, etc. Auf diese Daten einstellen. Standard-Abfrage-Zeug.
Blick auf Kassandra, ist alles schon sortiert, basierend auf den Parametern, die ich in meinem storage-conf.xml. Also ich hätte die eine bestimmte Zeichenfolge als mein Schlüssel in der SuperColumn, und halten Sie einen Haufen von Daten in den Spalten darunter. Aber ich kann nur Sortieren nach einer Spalte, und ich kann das nicht real Suche in den Spalten ohne ziehen alle SuperColumns, und die Schleife durch die Daten, richtig?
Ich will nicht zu duplizieren, Daten über verschiedene ColumnFamilies, so möchte ich sicherstellen, dass Cassandra ist angemessen für mich. In Facebook, Digg, Twitter, Sie haben viel von der Suche Funktionen, also vielleicht bin ich einfach nicht sehen, die Lösung.
Gibt es eine Möglichkeit mit Cassandra bei mir zu suchen oder filter, die bestimmte Datenwerte in einem SuperColumn, oder dessen zugehörigen Spalte(N)? Wenn nicht, ist es eine andere NOSQL-option?
Im Beispiel unten, es scheint, ich kann nur Abfrage für phatduckk, friend1,John, etc. Aber was, wenn ich finden wollte, jemand, der in der ColumnFamily, lebte in der Stadt == "Beverley Hills"? Kann es getan werden, ohne wieder alle Rekorde? Wenn dem so ist, könnte ich eine Suche für die Stadt == "Beverley Hills" UND Status == "CA"? Es scheint nicht, wie ich tun kann, entweder, aber ich wollen, stellen Sie sicher, und sehen, was meine Optionen sind.
AddressBook = { //this is a ColumnFamily of type Super
phatduckk: { //this is the key to this row inside the Super CF
friend1: {street: "8th street", zip: "90210", city: "Beverley Hills", state: "CA"},
John: {street: "Howard street", zip: "94404", city: "FC", state: "CA"},
Kim: {street: "X street", zip: "87876", city: "Balls", state: "VA"},
Tod: {street: "Jerry street", zip: "54556", city: "Cartoon", state: "CO"},
Bob: {street: "Q Blvd", zip: "24252", city: "Nowhere", state: "MN"},
}, //end row
ieure: {
joey: {street: "A ave", zip: "55485", city: "Hell", state: "NV"},
William: {street: "Armpit Dr", zip: "93301", city: "Bakersfield", state: "CA"},
},
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du durchführen können diese Art von Operationen in Kassandra. Es gibt eine bestimmte Art von Auswahl Prädikate, die festgelegt werden können auf Spalte-Schlüssel, aber nichts auf dem Wert, den Sie halten. Blick auf die API und überprüfen get_slice/get_superslice und get_range Abfrage-Typen. Wieder, all dies ist über die Tasten in der ColumnFamily oder SuperColumnFamily nicht die Werte.
Wenn Sie wollen, dass die Art von Funktionalität, die Sie beschrieben haben, dann Ihre beste Wette ist, eine SQL-Datenbank. Bilden Sie korrekte Indizes auf den Tabellen, besonders auf die Spalten, die am meisten abgefragt und Sie sehen einen großen Unterschied in der Leistung von Abfragen. Hoffe, das hilft.
Sie "wollen nicht zu duplizieren, Daten über verschiedene ColumnFamilies," aber das ist, wie man diese Art von Abfragen in Cassandra. Sehen http://maxgrinev.com/2010/07/12/do-you-really-need-sql-to-do-it-all-in-cassandra/
Super-Familie nicht unterstützt sekundären index, aber regelmäßige Kolumne Familie tun. Die Verwendung sekundärer index, den Sie verwenden können, die GetWhere-Anweisung.
Hier ist ein Beispiel, genommen von einem meiner PHP-Projekte:
Diesen code verwenden Sie diese Cassandra API : https://github.com/kallaspriit/Cassandra-PHP-Client-Libraryf
Beachten Sie, dass seit die Frage gestellt wurde, Cassandra Unterstützung für die Indizes automatisch verwaltet durch die Cassandra-system (ich glaube seit 0.8). Beantworten kann die Frage für einige Leute zu verwalten, sondern Ihren eigenen index.
http://www.datastax.com/docs/1.1/dml/using_cli#indexing-a-column
Diesem wird gesagt, ich wollte auch erwähnt, dass eine SQL-Datenbank, bei der es erstellt einen index, der Duplikate eine Menge von Daten zu generieren, sagte index. Es ist wirklich noch Billig, im Cassandra-vor allem, weil Sie lieb zu optimieren. Das Hauptproblem ist, dass Sie haben zu halten, die Kohärenz manuell die SQL stellt für Sie transparent. Aber beide Mechanismen verwenden Sie genau die gleichen theoretischen Konzept.
Dies ist ein bisschen wie die re-Programmierung Ihrer eigenen std::string mit Spezialisierungen, die beziehen sich auf Ihre Bewerbung... (man denke an die QString-und CString-zum Beispiel!)