数据库
首页 > 数据库> > mysql – Mnesia中的唯一约束

mysql – Mnesia中的唯一约束

作者:互联网

我正在开发一个需要大量数据库写入的Erlang应用程序.除了主键之外,我的模式还具有强制执行唯一约束的另一个属性.

假设我有一个ID,一个unique_constraint_field和其他一些字段.我现在需要更新DB中对应于唯一ID的行,因为没有其他行应该已经具有我要更新的unique_constraint_field值的值.

由于大量的更新(每次更新只会影响1行)我需要执行,(也需要低延迟)我依靠主键和该属性的唯一约束来捕获重复,而不是更新语句使用子查询.这允许我在单个查询中执行更新(在95%的时间内发生),在剩余的5%中,我可以捕获异常以对主键或唯一属性违规采取必要的操作.

我目前正在使用ODBC mysql驱动程序.但是,驱动程序返回任何错误的非常一般的错误消息.虽然现在我的原型在我认为任何错误是一个关键违规时工作得很好,但这个模型显然有很多缺陷.我找不到任何其他正确的驱动程序/方式从erlang连接到mysql.

我正在考虑切换到Mnesia(仅限内存模式以满足我的速度要求),因为Erlang和Mnesia如此无缝融合.但是,我看到Mnesia没有任何唯一的键约束,我可以使用它来在单个查询中执行数据库更新.

我需要建议如何最好地在Erlang中实现这个要求.有没有办法在Mnesia中执行条件更新?或者,我应该关注其他任何高速数据库替代方案吗?非常感谢任何帮助/见解.

解决方法:

我不知道什么是最好的解决方案,但我要尝试的是为记录制作两个表,使用unique_constraint_field制作一个索引,并在事务中处理CRUD操作中的每个CUD,检查和更新索引.原因是在mnesia中你不能设置索引类型并且始终是重复的包.我认为,因为无论如何你的索引都是唯一的,它不应该引入任何额外的性能损失.如果使用mnesia索引功能,您仍然需要编写自己的CUD操作,结果与使用两个表几乎相同.幸运的是,mnesia以最少的开发人员工作处理嵌套事务,与传统的RDBMS相比,这一点相对容易.

标签:mysql,database,erlang,performance,mnesia
来源: https://codeday.me/bug/20190627/1301906.html