1

几乎每个业务应用程序都需要数据库来存储数据以及在该数据上完成的事务。事务通常需要毫秒数量级的时间。同时,在交易应用程序中,完全不能接受的一件事是“延迟”。那么,在此类需要延迟上限的应用程序中做出的权衡是什么?

例如,客户进行了一笔交易,它必须通过一些检查,这些检查存储在数据库中,需要进行数据库提取。然后,应将交易传递给 OMS/ORS 或交易所。而且,在每一层,都需要在数据库中存储某种交易数据。应该如何在事务持久性和低延迟之间保持平衡?

4

2 回答 2

2

两件事情:

  • 缓存:在您的应用程序中缓存规则,因此您无需为每笔交易都访问数据库
  • 线程化:将数据库中存储事务数据的代码放到另一个线程中。像这样,您可以立即将交易路由到交易所,并同时保护数据库中的数据。
于 2011-09-02T09:35:02.530 回答
0

现在人们使用内存事务系统,因此您可以减少通过数据库获得的网络延迟。

以下是您可以考虑的一些低延迟事项

  • 要在 Java 中实现低延迟,您必须在 Java 中控制 GC,有很多方法可以做到这一点,例如预分配对象(即使用享元设计模式),使用原始对象 - trove 非常适合,所有数据结构基于原始,重用对象实例,例如创建系统范围的字典以减少创建新对象,从流/套接字/数据库读取数据时非常好的选择

- 尝试使用免等待算法(这有点困难)、无锁算法来减少争用。你可以找到大量的例子

- 使用内存计算。内存很便宜,你可以在内存中存储 TB 的数据。

- 使用机械同情 - 参考 lmax 破坏者,优秀的框架

于 2012-10-10T13:26:15.033 回答