【问题标题】:Fast Transfer Of Rows Between Databases数据库之间的快速行传输
【发布时间】:2016-04-28 09:56:40
【问题描述】:

我使用 SQL CE (4.0) 数据库作为本地缓存,用于存储来自主 SQL Server (Express 2014) 中特定视图的记录。我的算法的每次迭代我都想验证本地缓存并使用来自主服务器的必要记录来更新它。

我当前的解决方案对包含行的 DataTable 进行序列化(使用 SyncFramework 代理项),并通过 WCF 将其带到反序列化并插入缓存中。原因是只需要一个端口即可打开 WCF。问题是这对我来说太慢了。

如果我放宽单端口要求,是否可以通过其他方法获得更好的性能?

【问题讨论】:

  • Web API 与 JSON 并使用 SqlCeBulkCopy 在客户端插入快速或 TableDirect ADO api。

标签: c# sql-server wcf optimization sql-server-ce


【解决方案1】:

不,启用多个端口不会提高数据传输或处理的性能。 TCP 端口不是可以承受压力的物理资源,而是标识特定进程或服务类型的逻辑构造。

您可以做一些事情来提高客户端和服务器之间的通信性能:

  • 使用更快的绑定:如 NetTcpBinding 或 NetNamedPipeBinding。
  • 在将数据发送到服务器之前压缩数据,以减少从客户端向服务器传输的信息。 (使用 DataTable 可能不是最佳策略)。
  • 异步调用服务。因此,您无需等待服务器响应即可继续在客户端工作。
  • 微调 WCF 以接受更多并行连接。
  • 如果您不需要,请使用自托管服务来避免 IIS 开销。

【讨论】:

  • 对不起,我想我不是很清楚。我只需要一个端口,我同意。我正在寻找根本不同的解决方案。我可以通过网络直接做 ADO 吗?这将完全绕过 WCF 序列化。
  • 你可以直接做ADO,性能肯定会提高。但这取决于您的架构决策,并取决于您的非功能性需求。我完全推荐的一件事是抽象缓存层,将缓存策略与业务规则分离。因此,您以后可以根据自己的需要将其切换到更好、更快或可扩展的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多