2016-08-03 49 views
0

Wir verwenden Hbase schon seit einiger Zeit. Das Problem, mit dem wir konfrontiert werden, ist die Scan + Filterleistung. Wir haben einen bekannten Ansatz mit einem Spaltenspeicher mit Schlüssel/Wert verwendet, der einen zusammengesetzten Zeilenschlüssel darstellt, der die meisten Ihrer Abfragefilter darstellt. z.B. customerid|calmonth|transactionid|productid|itemid. Der Benutzer darf mehrere Kalendermonate, Transaktionen, Produkte und Artikel gleichzeitig abfragen. Da die Daten in hbase ist unser Ansatz natürlich sortiert wurde entweder von folgenden gewesen:NoSql-Datenbank zum effizienten Scannen mehrerer Composite-Rowkeys

  1. Scan basierend auf StartRow und EndRow die customerid|startmonth umfassen und customerid|endmonth beenden. Holen Sie sich alle Daten im Server und wenden Sie den Rest der Filter in App-Server
  2. Scan basierend auf Starrow und Entrow, die customerid|startmonth und Ende customerid|endmonth enthalten. Wenden Sie auch ColumnValueFilter an, da wir auch einige Filterwerte als CQs speichern.

Beide oben genannten Ansatz ist jetzt nicht skalieren. SCAN ist unser einziger Anwendungsfall. Es ist nur Lesetisch. Ich weiß, ich kann Hbase ein RowFilter mit RegEx-Komparator versuchen, aber ich frage mich, ob es eine andere NoSQL-Option gibt, die dies natürlich angeht. h. eine baumartige Struktur für einen Zeilenschlüssel aufweisen und, was wichtig ist, mehrere Zweige parallel durchlaufen kann, so dass sie nicht an Leistung leidet. Ich schaue mir eine Datenbank wie neo4j an, aber ich bin mir nicht sicher, ob das die richtige Wahl ist.

+0

Wie viele Zeilen haben Sie pro customer_id | Monat? Wenn Sie eine Menge haben, ist es ein Flaschenhals, diese von hbase auf Ihren App-Server zu bringen. – halil

+0

Es ist wirklich. Es ist 10 bis 100 Tausende von je nach Abfrage. Ich kann sicherlich verschiedene Arbeitslasten identifizieren und unterschiedliche Verarbeitungen und/oder Speicher für diese durchführen – nir

Antwort

0

Da Sie mehrere Zugriffspfade haben, benötigen Sie Indizes, um diesen performanten und einen rudimentären Kardinalitätsmechanismus zu erstellen, um den zu verwendenden Index auszuwählen. Du könntest Splice Machine drauflegen und es ziemlich schnell arbeiten lassen. Es ist Open Source ...