0

I wie unten einen Knoten-Setup haben, DC1 (Node1, Node2) und DC2 (Node3 und Knoten4)Cassandra mit NodeJS Client funktioniert nicht wie erwartet

ich Cassandra zu verbinden versuche, über NodeJS-Client wie unten,

const cassandra = require('cassandra-driver'); 
const client = new cassandra.Client({ contactPoints: ['172.30.56.60','172.30.56.61','172.30.56.62','172.30.56.63'], keyspace: 'users' }); 

console.log(client); 

const query = 'INSERT INTO user (user_id, user_name, user_phone) VALUES (?, ?, ?) IF NOT EXISTS'; 

console.log(query); 
console.time('time'); 
for (var primaryKey = 0; primaryKey < 10000; primaryKey++) { 
    const params = [primaryKey, 'hari', 12345678]; 
    console.log(primaryKey); 
    client.execute(query, params, { prepare: true, consistency: cassandra.types.consistencies.quorum }); 
    console.log(primaryKey); 
} 
console.timeEnd('time'); 

ich versuche, die Gesamtzeit für das Einfügen all 10000 Einträge genommen zu verfolgen, aber ich beobachte, dass es die Einträge aktualisiert asynchron (dh), erhalte ich die Ausführungszeit als ' 3,755 ms, aber wenn ich cqlsh Shell einchecke, ist es langsam (mit select count (*) vom Benutzer;) aktualisiert, ANMERKUNG: Ich habe die Konsistenz als 'cassandra.types.consistencies.quorum' gegeben

Cassandra: 3.0

Was die Änderung ich brauche, ist zu machen synchron ausführen?

Danke, Harry

Antwort

2

jetzt gerade ausführen Sie alle Ihre Anfragen gleichzeitig als Sie nicht für jede Abfrage zu beenden warten.

Die client.execute-Methode gibt eine Zusage zurück. Um also jede Abfrage synchron auszuführen, können Sie auf das Abschließen jedes Versprechens warten und dann die nächste Abfrage durchführen. Sie können dies tun mit async/await -

async function insertBulk() { 
    for (var primaryKey = 0; primaryKey < 10000; primaryKey++) { 
     const params = [primaryKey, 'hari', 12345678]; 
     await client.execute(query, params, { prepare: true, consistency: cassandra.types.consistencies.quorum }); 
    } 
} 

async function getTime() { 
    console.time('time'); 
    await insertBulk(); // wait till all the queries are executed sequentially. 
    console.timeEnd('time'); 
} 

getTime(); 

Auch wenn Ihr Anwendungsfall viele Dokumente einzufügen dann könnte man die Batch Abfrage verwenden. Lesen Sie darüber here.

+1

Danke @Jyotman Singh :) – Harry

Verwandte Themen