Обновление нескольких счетчиков в одном запросе - PullRequest
0 голосов
/ 20 сентября 2018

Мое приложение в настоящее время выполняет что-то вроде следующего (минимальный пример):

UPDATE counts SET count = count + 1 WHERE id = 1
UPDATE counts SET count = count + 1 WHERE id = 2
UPDATE counts SET count = count + 1 WHERE id = 2
UPDATE counts SET count = count + 1 WHERE id = 3
UPDATE counts SET count = count + 1 WHERE id = 3

Однако существует несколько тысяч обновлений в секунду, и при пиковом трафике оно слишком медленное.

Поэтому я хотел бы ускорить это, объединив заявления.Следующее, конечно, не работает:

UPDATE counts SET count = count + 1 WHERE id IN (1, 2, 2, 3, 3)

count s 2 и 3 будут неправильными (1 вместо 2).

У меня есть вручнуюразделить его на что-то вроде следующего:

UPDATE counts SET count = count + 1 WHERE id IN (1, 2, 3)
UPDATE counts SET count = count + 1 WHERE id IN (2, 3)

или есть более умный способ сделать это непосредственно в выражении?

1 Ответ

0 голосов
/ 20 сентября 2018

Вы можете использовать другой номер, чем 1, чтобы добавить к счету.(Функционально вы можете; вам придется тестировать производительность.)

cqlsh> UPDATE mykeyspace.counts SET count = count + 1 where k1=1;
cqlsh> UPDATE mykeyspace.counts SET count = count + 1 where k1=2;
cqlsh> UPDATE mykeyspace.counts SET count = count + 1 where k1=3;
cqlsh> select * from mykeyspace.counts ;

 k1 | count
----+-------
  1 |     1
  2 |     1
  3 |     1

(3 rows)
cqlsh> UPDATE mykeyspace.counts SET count = count + 57 where k1=1;
cqlsh> select * from mykeyspace.counts ;

 k1 | count
----+-------
  1 |    58
  2 |     1
  3 |     1

(3 rows)
cqlsh> UPDATE mykeyspace.counts SET count = count + 65 where k1 in (2,3);
cqlsh> select * from mykeyspace.counts ;

 k1 | count
----+-------
  1 |    58
  2 |    66
  3 |    66
...