2016-04-19 15 views
1

Ich frage mich, ob ich die forceKeyspaceFlush() Funktion im Dienstprogramm nodetool aus dem C/C++ - Treiber von Cassandra replizieren könnte.Kann ich eine Cassandra-Tabelle aus dem C/C++ - Treiber erzwingen, wie es nodetool tut?

Die nodetool Funktion sieht wie folgt aus:

public class Flush extends NodeToolCmd 
{ 
    @Arguments(usage = "[<keyspace> <tables>...]", description = "The keyspace followed by one or many tables") 
    private List<String> args = new ArrayList<>(); 

    @Override 
    public void execute(NodeProbe probe) 
    { 
     List<String> keyspaces = parseOptionalKeyspace(args, probe); 
     String[] tableNames = parseOptionalTables(args); 

     for (String keyspace : keyspaces) 
     { 
      try 
      { 
       probe.forceKeyspaceFlush(keyspace, tableNames); 
      } catch (Exception e) 
      { 
       throw new RuntimeException("Error occurred during flushing", e); 
      } 
     } 
    } 
} 

Was möchte ich in meinem C++ replizieren Software ist diese Zeile:

probe.forceKeyspaceFlush(keyspace, tableNames); 

Ist es möglich?

Antwort

2

Dies ist eine ungewöhnliche Anfrage, vor allem, weil Cassandra für die Verteilung entwickelt wurde. Wenn Sie also eine Abfrage ausführen, müssen Sie diese Sperrung für jedes (möglicherweise viele) Replikat durchführen. Anstatt Sie davon zu überzeugen, dass Sie das nicht wirklich brauchen, werde ich versuchen, Ihre Frage zu beantworten - aber Sie brauchen das wahrscheinlich nicht wirklich.

Nodetool verwendet die JMX-Schnittstelle (unter tcp/7199), um das Flush zu erzwingen - Ihr c/C++ - Treiber spricht über das native Protokoll (unter tcp/9042). Zu diesem Zeitpunkt ist eine Spülung über the native protocol nicht möglich.

Um diese Einschränkung zu umgehen, müssen Sie entweder ein jmx-fähiges Befehlszeilendienstprogramm (nodetool oder anderes) ausführen, einen JMX-Client in C++ implementieren (oder es wurde das native Protokoll erweitert). Keine davon sind besonders angenehme Optionen, aber ich stelle mir vor, dass die Ausführung eines jmx CLI-Programms wesentlich einfacher ist als die anderen beiden.

+0

Nun ... Dies ist in Verbindung mit dieser anderen Frage: http://stackoverflow.com/questions/36689227/how-do-i-load-a-lot-of-data-at-once-in- a-cassandra-cluster-of-one-node # antwort-36713619 - es sieht so aus, als würde ich ohne CASSANDRA nicht abstürzen. Ich weiß, dass es mir gut gehen würde, wenn ich einen Cluster mit 20 Knoten hätte, denn das sind nicht so viele Daten. In einem Ein-Knoten-Test wird der Knoten jedoch leider ziemlich schnell überschwemmt. –