Значение этой функции будет обновляться, если используется в мнезии: транзакция
update_a(Tab, Key, Value) ->
fun() ->
[P] = mnesia:wread({Tab, Key}),
mnesia:write(P#pixel{a=Value})
end.
Предложение: загляните в QLC, если вам нужен синтаксический сахар, который больше похож на синтаксис SQL.
Производительность, конечно, лучше всего оценивается, но у QLC есть издержки, я не уверен, что они актуальны по сравнению с другими деталями. Я просто подумал, что приведенный вами пример SQL обновит все записи, имеющие i=1
. Использование QLC для извлечения этого набора записей красивее, чем вызовы mnesia.
Также следует заметить, что wread
требует блокировки записи напрямую, потому что мы заранее знаем, что обновим эту запись. Это микрооптимизация, чтобы сначала избежать блокировки чтения, а затем передумать и получить блокировку записи. Я не проверял это в течение долгого времени, хотя.
Если производительность по-прежнему остается проблемой, вам следует рассмотреть различные подходы, в которых вы используете грязные операции. Но вы действительно должны попытаться выяснить, сколько транзакций в секунду вам нужно, чтобы быть «достаточно быстрым».