Я разрабатываю приложение Erlang, которое требует много записи DB. В моей схеме помимо первичного ключа есть еще один атрибут с принудительным соблюдением уникального ограничения.Уникальное ограничение в Mnesia
Скажем, у меня есть идентификатор, уникальное_конфигурирование и другие поля. Мне нужно обновить строку в БД, соответствующую уникальному идентификатору, учитывая, что никакая другая строка уже не должна иметь значение значения unique_constraint_field, которое я собираюсь обновить.
Из-за большого объема обновлений (каждое обновление будет влиять только на 1 строку) Мне нужно выполнить (требуется низкая латентность). Я полагаюсь на первичный ключ и уникальное ограничение на этот атрибут, чтобы поймать дублирование, вместо этого оператора обновления с использованием подзапроса. Это позволяет мне выполнить обновление в одном запросе (что происходит в 95% случаев), а в оставшихся 5% я могу поймать исключение, чтобы предпринять необходимые действия в отношении первичного ключа или нарушения уникального атрибута.
В настоящее время я использую драйвер mysql ODBC. Однако драйвер возвращает очень общее сообщение об ошибке для ЛЮБОЙ ошибки. Хотя сейчас мой прототип работает хорошо, когда я предполагаю, что какая-либо ошибка является ключевым нарушением, эта модель, очевидно, в значительной степени ошибочна. Я не могу найти другого достойного драйвера/способа подключения к mysql от erlang.
Я думаю о переключении в Mnesia (режим только для памяти для моих требований скорости), так как Erlang и Mnesia сочетаются так легко. Тем не менее, я вижу, что у Mnesia нет каких-либо уникальных ключевых ограничений, которые я могу использовать для выполнения моего обновления БД в одном запросе.
Мне нужны предложения как наилучшим образом реализовать это требование изнутри Erlang. Есть ли способ выполнить условное обновление в Mnesia? Или, есть ли какая-либо другая высокоскоростная DB-альтернатива, на которую я должен смотреть? Любая помощь/понимание очень ценится.
Спасибо, это звучит интересно, посмотрим. – jeffreyveon