1

これが私のシナリオです。テーブルにクローンid主キーとclusterkeyクラスターキーがあると考えてください。主キーに該当する 1 つのレコードを削除し、同じ主キーで異なるクラスター キーを持つ新しいレコードを挿入したいと考えています。この場合、並行性のために常に挿入が行われていないように見えますか? タイムスタンプを使用してみましたが、同じ問題です。

const query1 = 'delete from table where id=? and clusterkey=?';
const query2 = 'INSERT INTO table (id, clusterkey, name) VALUES (?, ?, ?)';
const queries = [
   { query: query1, params: ['1', '3'] },
   { query: query2, params: ['1', '8', 'GoodName'] } 
];
client.batch(queries, { prepare: true }, function (err) {
   console.log(err, 'done')
});

タイムスタンプの使用

const query1 = 'delete from table where id=? and clusterkey=? using timestamp ?';
const query2 = 'INSERT INTO table (id, clusterkey, name) VALUES (?, ?, ?) using timestamp ?';
const queries = [
   { query: query1, params: ['1', '3', Date.now() * 1000] },
   { query: query2, params: ['1', '8', 'GoodName', Date.now() * 1000] } 
];
client.batch(queries, { prepare: true }, function (err) {
   console.log(err, 'done')
});

テーブル情報:

create table sample (id text, group text, name text, PRIMARY KEY (id, group))

クエリ結果:

バッチの前に結果を選択

    id  |clusterkey |name 
----------------------------- 
    1   |3       |wrongname 
    2   |2       |Hello

バッチ後

    id  |clusterkey |name 
----------------------------- 
    2   |2       |Hello 
4

2 に答える 2

0

@ruhulの回答に加えて、バッチを実行していない場合、削除も機能しないはずです。しかし、挿入のみについて言及しました。

@ruhul が言及したケースでない場合は、クラスターに一貫性があるかどうかを確認してください。クラスターが一貫性を失ったときに発生します。

クラスターで修復を実行し ( nodetool repair)、再度チェックします。

于 2018-03-03T08:35:36.107 に答える