我需要从海外访问sybase数据库(12.5)。高延迟绝对是个问题。
我已经优化了连接参数,以更好地利用网络,并实现了20倍的性能提升,但这仍然不够:1分钟获得3Mb的数据。
我们的应用还需要10到20倍的增长。
技术资料:
- 数据流经使用TDS协议的单个TCP连接
- 客户端应用程序是一个带有宏的excel表格,使用默认的Sybase驱动程序
- 企业环境使得很难在10年以上的架构中推动重大变化,因此解决方案需要最小的侵入性。但由于该项目的重要性,可能会有一些变化。
谁能给我指点一下吗?
我已经想到了:
- 将SQL请求拆分为多个并发连接到数据库。问题是数据一致性:如果记录在同一时间被修改,因为请求不会在同一时间精确地执行,该怎么办?是否有一种现有的机制来将请求分散到不同连接上的几个调用上?
- 使用某种数据库"缓存"或"本地复制"海外,但我不知道什么是可能的。
谢谢。
尝试安装本地数据库(ASE或ASA)并将此数据库与Sybase Mobilink(或Sybase Replication Server,如果您需要较小的复制延迟并且您有很多钱)同步。
(我知道我在回答我自己的问题)
最终,我们决定设计自己的数据库远程访问协议。这并不复杂,因为我们只使用SQL的基本子集(SELECT和UPDATE),并且协议无论如何都不需要理解SQL。
通过使用我们自己的协议,我们将能够使用压缩,使客户端能够同时使用多个TCP链接,最大化网络利用率,并为我们的应用程序添加一些特定的功能缓存。
客户端将是我们的应用程序,服务器将是真正的数据库的"代理",坐在它旁边(就像@Tim在评论中建议的那样)。
这不是唯一的解决方案,但我们认为这是巨大的复制成本,开发复杂性和预期收益之间的良好平衡。