mysql - Mnesia 中的唯一约束

标签 mysql database erlang performance mnesia

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

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

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

我目前正在使用 ODBC mysql 驱动程序。但是,驱动程序会针对任何错误返回一条非常通用的错误消息。虽然现在当我假设任何错误都是关键违规时我的原型(prototype)运行良好,但这个模型显然有很多缺陷。我找不到任何其他合适的驱动程序/方式来从 erlang 连接到 mysql。

我正在考虑切换到 Mnesia(满足我的速度要求的纯内存模式),因为 Erlang 和 Mnesia 如此无缝地融合在一起。但是,我发现 Mnesia 没有任何可用于在单个查询中执行数据库更新的唯一键约束。

我需要有关如何在 Erlang 中最好地实现此要求的建议。有什么方法可以在 Mnesia 中执行条件更新吗?或者,还有其他我应该考虑的高速数据库替代方案吗?非常感谢任何帮助/见解。

最佳答案

mnesia 可以 crash写入量很大,除非你tune it .但是您可以使用类似于 {ID, UniqueConstraint} 的复杂主键,这可以使您的更新更加简单。还有一个名为 osmos 的新 erlang 库用于专门为处理大量写入而创建的磁盘 ordered_set 表。

关于mysql - Mnesia 中的唯一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1063503/

相关文章:

php - 将表从 MySQL 同步到 MSSQL

database - 绘制 ER 图的令人困惑的场景

php - 尽管数据库用户名和密码正确,但登录脚本无法正常工作

mysql - 最新行在选择中不可用...以进行更新

MySQL - 关系数据库和标记

mysql - 如何将一个 SQL 数据库拆分成多个文件(稍后重新组合)?

索引为 : do many inserts/updates influence performance? 的 MySQL 表 如果是,如何再次加速?

testing - Erlang 测试套件

erlang - 如何运行使用 Rebar 分布式的应用程序?

erlang - 用 Ada 写的 Erlang?