我使用的平台具有使用 SQL 服务器表作为队列的消息传递系统。
该系统基于此: 使用表作为队列
ATM 我们面临一些可扩展性问题,因为这种分布式模式主要基于 SQL 锁和磁盘操作,以保证数据的持久性/一致性。
为了解决基于磁盘的 I/O 瓶颈并改善糟糕的分配逻辑,我们正在考虑将基于磁盘的 SQL 表更改为 SQL 2014 和 2016 中可用的内存 SQL (Hekaton)。
我已经阅读了一些关于 Hekaton 的内容,但我仍然不确定这是否是最好的方法,或者是否可以将这些队列实现到内存中以及这是否是最好的方法。
这些队列中的大多数都在实现悲观并发,而 Hekaton 使用无锁系统仅乐观并发(基于多版本)。“总是”(我知道这是一个坏词)有可能将悲观的并发变为乐观的并发吗?例如在上述队列中。
Hekaton 是否适用于许多插入/删除(入队/出队)、订单行(FIFO 队列)和大量表大小变化(服务器上的工作负载变化会增加/减少队列大小)?是否可以正确更新本机存储过程查询性能的统计信息?
我觉得本机编译的 SQL 存储过程会大大提高性能,但我不确定这种实现(相关的 FIFO 队列)是否适合在 Hekaton 上使用,因为我没有找到任何“在内存队列”使用 Hekaton 实现。