たくさんのDB書き込みを必要とするErlangアプリケーションを開発しています。私のスキーマには、主キーに加えて、一意の制約が適用された別の属性があります。
ID、unique_constraint_field、およびその他のフィールドがあるとします。更新しようとしているunique_constraint_field値の値が他の行にすでに存在していないことを前提として、一意のIDに対応するDBの行を更新する必要があります。
更新の量が多いため(各更新は1行にのみ影響します)、実行する必要があります(低レイテンシも必要です)更新ステートメントではなく、主キーとその属性の一意の制約に依存して重複をキャッチしますサブクエリを使用します。これにより、1回のクエリで更新を実行でき(95%の確率で発生)、残りの5%で例外をキャッチして、主キーまたは一意の属性違反について必要なアクションを実行できます。
現在、ODBCmysqlドライバーを使用しています。ただし、ドライバは、エラーに対して非常に一般的なエラーメッセージを返します。エラーをキー違反と見なすと、現在私のプロトタイプは正常に機能していますが、このモデルには明らかにかなりの欠陥があります。erlangからmysqlに接続するための他の適切なドライバー/方法が見つかりません。
ErlangとMnesiaが非常にシームレスに融合するため、Mnesia(速度要件のメモリのみのモード)に切り替えることを考えています。ただし、Mnesiaには、単一のクエリでDB更新を実行するために使用できる一意のキー制約がないことがわかります。
Erlang内からこの要件を実装するための最良の方法として提案が必要です。Mnesiaで条件付き更新を実行する方法はありますか?または、他に検討すべき高速DBの代替手段はありますか?どんな助け/洞察も大歓迎です。