我正在开发一个需要大量数据库写入的 Erlang 应用程序。除了主键之外,我的模式还有另一个强制执行唯一约束的属性。
假设我有一个 ID、一个 unique_constraint_field 和一些其他字段。我现在需要更新数据库中与唯一 ID 对应的行,因为没有其他行应该已经具有我要更新的 unique_constraint_field 值的值。
由于大量更新(每次更新只会影响 1 行)我需要执行(也需要低延迟)我依靠主键和对该属性的唯一约束来捕获重复,而不是更新语句使用子查询。这允许我在单个查询中执行更新(这发生在 95% 的时间),在剩余的 5% 中,我可以捕获异常以对主键或唯一属性违规采取必要的措施。
我目前正在使用 ODBC mysql 驱动程序。但是,驱动程序会为任何错误返回一个非常通用的错误消息。虽然现在当我假设任何错误都是关键违规时我的原型运行良好,但这个模型显然存在很大缺陷。我找不到任何其他体面的驱动程序/方式来从 erlang 连接到 mysql。
我正在考虑切换到 Mnesia(满足我的速度要求的纯内存模式),因为 Erlang 和 Mnesia 融合得如此无缝。但是,我看到 Mnesia 没有任何唯一的键约束,我可以使用这些约束在单个查询中执行我的数据库更新。
我需要有关如何从 Erlang 中最好地实现此要求的建议。有没有办法在 Mnesia 中执行条件更新?或者,我应该考虑其他任何高速数据库替代方案吗?非常感谢任何帮助/见解。