2016-08-11 2 views
0

Hallo allerseits Vielen Dank im Voraus für Ihre Hilfe und Entschuldigung für mein Bett Englisch.
Ich bin Neuling mit Cassandra Datenbank.Wie erstellt man Tabellenstruktur, die mehrere WHERE-Klausel mit verschiedenen ORDER BY in Cassandra unterstützt

jetzt mein Problem ist ich eine Tabelle erstellen mag, auf das ich mehrere Abfrage mit anderer Art von where-Klausel und ORDER BY-Klausel

Dies ist die Struktur meines Tisches

CREATE TABLE iF NOT EXISTS AD_ChangeLog 
( AD_ChangeLog_ID int , 
    AD_Session_ID int, 
    AD_Table_ID int, 
    AD_Column_ID int, 
    AD_Client_ID int, 
    AD_Org_ID int, 
    IsActive text, 
    Created timestamp, 
    Updated timestamp, 
    CreatedBy int, 
    UpdatedBy int, 
    Record_ID int, 
    Oldvalue text, 
    NewValue text, 
    Undo text, 
    Redo text, 
    IsCustomization text, 
    TrxName text, 
    Description text, 
    EventChangeLog text, 
    AD_ChangeLog_UU Text 
); 

    and i want to fire this queries on it 
1) SELECT * FROM AD_ChangeLog WHERE IsCustomization='Y' AND IsActive='Y' ORDER BY AD_Table_ID, AD_Record_ID, AD_Column_ID; 

2) SELECT * FROM AD_ChangeLog WHERE AD_ChangeLog = x; 

3) SELECT * FROM AD_ChangeLog WHERE AD_Table_ID=x AND Record_id=y AND ad_column_id=z ORDER BY UPDATED; 

4) SELECT * FROM AD_ChangeLog WHERE AD_Table_ID=x AND Record_id=y ORDER BY UPDATED; 

ich habe abfeuern kann dies aber nicht versucht, Glück :(

==> 1) 
CREATE TABLE iF NOT EXISTS AD_ChangeLog 
( AD_ChangeLog_ID int , 
    AD_Session_ID int, 
    AD_Table_ID int, 
    AD_Column_ID int, 
    AD_Client_ID int, 
    AD_Org_ID int, 
    IsActive text, 
    Created timestamp, 
    Updated timestamp, 
    CreatedBy int, 
    UpdatedBy int, 
    Record_ID int, 
    Oldvalue text, 
    NewValue text, 
    Undo text, 
    Redo text, 
    IsCustomization text, 
    TrxName text, 
    Description text, 
    EventChangeLog text, 
    AD_ChangeLog_UU Text, 
    Primary Key (AD_ChangeLog_ID,Updated) 
)With CLUSTERING ORDER BY (Updated DESC); 
CREATE INDEX ON AD_ChangeLog (AD_Table_ID); 
CREATE INDEX ON AD_ChangeLog (AD_Column_ID); 
CREATE INDEX ON AD_ChangeLog (Record_ID); 

==> 2) 
CREATE TABLE iF NOT EXISTS AD_ChangeLog 
( AD_ChangeLog_ID int , 
    AD_Session_ID int, 
    AD_Table_ID int, 
    AD_Column_ID int, 
    AD_Client_ID int, 
    AD_Org_ID int, 
    IsActive text, 
    Created timestamp, 
    Updated timestamp, 
    CreatedBy int, 
    UpdatedBy int, 
    Record_ID int, 
    Oldvalue text, 
    NewValue text, 
    Undo text, 
    Redo text, 
    IsCustomization text, 
    TrxName text, 
    Description text, 
    EventChangeLog text, 
    AD_ChangeLog_UU Text, 
    Primary Key ((AD_Table_ID,Record_ID,AD_Column_ID),AD_ChangeLog_ID,Updated) 
); 

ich kann nicht verstehen, wie diese für alle Fall arbeiten machen
, wenn es eine andere für einen Fall anfangen zu arbeiten nicht
bitten Sie bieten wieder eine Leitlinie
danken :)

Antwort

1

Sekundärindizes mehrere Abfragemuster auf einer Cassandra Tabelle unterstützen können, aber Ihre Spalten erscheinen Mächtigkeit Probleme zu haben. Sekundäre Indizes sind für sehr niedrige oder sehr hohe Kardinalitätswerte wie Record_ID, IsCustomization und IsActive nicht geeignet. Ein sekundärer Index für diese Spalten wird wahrscheinlich nicht gut skalieren, selbst wenn er in einem Testbett funktioniert. Ein Hintergrundwissen zu Indizes in Cassandra finden Sie unter When to use an index.

Die Cassandra-Datenmodellierung demormalisiert Tabellen häufig, um mehrere Abfragestrukturen für dieselben Daten zu implementieren. Grundsätzlich duplizieren Sie Ihre Daten direkt oder mit materialisierten Ansichten (verfügbar in Cassandra 3.0 und höher).

Sie können denormalisierter Lookup-Tabellen erstellen und light weight transactions verwenden, um in den Basis- und Lookup-Tabellen einzufügen:

CREATE TABLE IF NOT EXISTS AD_ChangeLog_IsActive 
    AD_ChangeLog_ID int, 
    AD_TableID int, 
    AD_ColumnID int, 
    IsActive text, 
    Primary Key ((IsActive, AD_TableID, AD_ColumnID)) 
); 

Da IsActive hat nur Ja/Nein-Werte, werden Sie Ihre Partitionsschlüssel wollen eine zusätzliche Spalte schließen (s), so dass die Daten nicht auf einem oder zwei Knoten Hotspots enthalten.

DataStax DSE Engine integriert Cassandra und Solr Suche, die möglicherweise die Art von Ad-hoc-Abfragen unterstützen, die Sie ausführen möchten.

Verwandte Themen