Mysql 关系数据库的实时重复数据消除策略

Mysql 关系数据库的实时重复数据消除策略,mysql,stored-procedures,concurrency,relational-database,deadlock,Mysql,Stored Procedures,Concurrency,Relational Database,Deadlock,我有一个带有一些字段的消息表,如id,version,timestamp 我正在尝试使用存储过程中实现的实时重复数据消除逻辑来插入和检索消息 插入时,如果表中已经存在具有给定id的消息,我将调用复杂的重复数据消除逻辑(许多if/ELSE语句),然后更新消息的版本,时间戳,等等。否则,我将插入新行 在检索时,我搜索最旧的消息,不仅选择它,还更新一些字段(更改状态、设置临时令牌等) 问题是,它的运行速度不如我所需要的快:插入时约200 rpm,检索时相同 单独而言,我的存储过程工作得很好,但当我

我有一个带有一些字段的消息表,如
id
version
timestamp

我正在尝试使用存储过程中实现的实时重复数据消除逻辑来插入和检索消息

  • 插入时,如果表中已经存在具有给定
    id
    的消息,我将调用复杂的重复数据消除逻辑(许多if/ELSE语句),然后更新消息的
    版本
    时间戳
    ,等等。否则,我将插入新行
  • 在检索时,我搜索最旧的消息,不仅选择它,还更新一些字段(更改状态、设置临时令牌等)
问题是,它的运行速度不如我所需要的快:插入时约200 rpm,检索时相同

单独而言,我的存储过程工作得很好,但当我同时执行这两个过程时,它们会在负载>30 rpm的情况下开始争夺锁,性能会显著降低,死锁会定期出现

是否有一些最佳实践可以解决我的问题?我觉得整个方法很糟糕,而不是我的具体实施

我是否应该为所有传入消息使用一些临时缓冲表,并在后置字执行重复数据消除逻辑?如果有任何想法,我将不胜感激

*我不能在我的情况下使用nosql DB(管理决策),我需要使用Mysql/MariaDb获得最大性能