Erlang: Mnesia: Обновление единственного значения поля подряд

Подрывную деятельность легко масштабироваться и распасться. По необходимости затраты тысячи долларов только для горстки сотрудников, пути к дорогому, и кроме того, это не предлагает ничего, что не предлагает подрывная деятельность.

Подрывная деятельность действительно легка, лучше, чем cvs.

я рекомендовал бы мерзавцу, если только их поддержка окон была лучше

7
задан ErJab 30 November 2009 в 16:52
поделиться

2 ответа

Значение этой функции обновит a, если используется в mnesia: transaction

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 заявляет о блокировке записи непосредственно в записи, потому что мы заранее знаем, что будем обновлять эту запись. Это микрооптимизация, чтобы сначала избежать блокировки чтения, а затем передумать и получить блокировку записи. Однако я долгое время не тестировал это.

Если производительность по-прежнему остается проблемой, вам следует изучить различные подходы, в которых используются грязные операции. Но вам действительно стоит попытаться выяснить, сколько транзакций в секунду вам нужно, чтобы быть «достаточно быстрым».

9
ответ дан 6 December 2019 в 23:07
поделиться

Я считаю, что вам нужно прочитать «строку», обновить любое поле, которое вам нужно, а затем записать результат и все эти операции в рамках «транзакции».

2
ответ дан 6 December 2019 в 23:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: