У меня есть таблица в PostgreSQL, которая выглядит следующим образом:
create table item_counts {
item string,
view_count int}
Я хотел бы использовать эту таблицу для отслеживания случаев появления item , увеличивая при необходимости значения.Первоначально таблица не заполнена, поэтому новое значение вставляется, если оно наблюдается впервые, в противном случае view_count увеличивается.Скорость и многозадачность - оба проблемы.
Я знаю, что могу сделать
rows_affected = execute("update item_counts set view_count = view_count + 1
where item = ?")
if rows_affected == 0:
execute("insert into item_counts ...")
Однако в многопоточной среде это небезопасно, поэтому мне пришлось бы заключить его в транзакцию.Это, в свою очередь, уменьшит скорость, поскольку после каждой вставки / обновления будет происходить фиксация.
Есть предложения, как это сделать чистым и эффективным способом?