我正在开发一个需要很多数据库写入的Erlang应用程序。除了主键之外,我的模式还有一个强制执行唯一约束的属性。Mnesia中的唯一约束条件
说我有一个ID,一个unique_constraint_field和其他一些字段。由于没有其他行应具有我要更新的unique_constraint_field值的值,因此我需要现在更新DB中对应于唯一ID的行。由于更新量大(每次更新只会影响1行),我需要执行(也需要低延迟),我依靠主键和该属性的唯一约束来捕获重复,而不是使用子查询的更新语句。这允许我在单个查询中执行更新(这发生在95%的时间内),而在剩余的5%中,我可以捕获异常以采取有关主键或唯一属性违规的必要操作。
我目前使用ODBC mysql驱动程序。但是,驱动程序返回任何错误的非常通用的错误消息。尽管现在我的原型在我认为任何错误都是关键违规时都运行良好,但这种模式显然存在很多缺陷。我找不到任何其他像样的驱动程序/从erlang连接到mysql的方式。
由于Erlang和Mnesia无缝融合,我正在考虑切换到Mnesia(仅限内存模式以满足我的速度要求)。但是,我发现Mnesia没有任何可用于在单个查询中执行数据库更新的唯一键约束。
我需要关于如何最好地从Erlang内部实现这个需求的建议。有什么方法可以在Mnesia中执行条件更新?或者,我还有其他高速数据库选择吗?任何帮助/见解非常感谢。
谢谢,这听起来很有趣,会看看。 – jeffreyveon 2009-07-28 16:36:48