【问题标题】:In Memory Communication Using .NET使用 .NET 进行内存通信
【发布时间】:2011-09-15 13:51:21
【问题描述】:

我已经使用通用列表和 Linq 实现了一种内存数据库类型,它由 ASP.NET 应用程序使用。在内存中构建这个数据库大约需要 45 秒(它是从数据库构建的),因此我们试图将 ASP.NET 应用程序池回收次数减少到每天凌晨 1:00 一次,以避免工作进程在中间进行回收一天,旋转 45 秒重建数据库。

我想将我们的内存数据库移动到与 ASP.NET 工作进程隔离的另一个进程,但我不确定如何让 ASP.NET 应用程序中的对象与一个单独的进程对话数据库。我应该使用 TCP 侦听器类型的东西吗?我知道 IIS 曾经能够托管库并通过远程处理使它们可用...这仍然可能吗?

如果您想知道我为什么要费心使用内存数据库,那是因为它为多面搜索应用程序提供了动力。使用 Linq 和内存列表比每次搜索都访问数据库要快很多数量级。

提前感谢您的任何建议。

【问题讨论】:

  • 但是进程间通信比数据库查询快吗?
  • @Matt,如果数据库在网络上并被其他应用程序使用,我认为在同一台机器上的进程上的 IPC 应该更快。
  • 内存数据库中的其他数据库或内置的asp.net caching都没有满足性能要求吗?
  • 如果您在同一台机器上,IPC 非常快。数据库查询,尤其是在访问磁盘时,比内存访问慢数百倍,即使有 IPC 开销。
  • Matt - 分面搜索不适合传统的关系数据库模型。这就是我使用基于内存数据库的自定义对象的原因。

标签: .net asp.net database memory tcp


【解决方案1】:

您可能应该通过命名管道查看 WCF:http://www.switchonthecode.com/tutorials/wcf-tutorial-basic-interprocess-communication

您可以在一个简单的 Windows 服务中托管您的数据库。

【讨论】:

  • 谢谢,克里斯。我会调查的。似乎这将是正确的解决方案。问候,克雷格
【解决方案2】:

Named pipes 是一种选择。您可以使用WCF Named Pipes bindings 将其抽象到一定程度。您还可以apply security permission 对上述命名管道提高安全性,以防止任意应用程序对您的内存数据库进行操作。

【讨论】:

    【解决方案3】:

    CK1、WCF 和命名管道正如其他人所说在同一台服务器中很好,如果你将在另一台机器(如应用程序服务器)中放入内存数据库托管,你可以简单地更改绑定并使用 netTCP 快速通过 TCP 跨机器进行二进制通信...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-19
      • 1970-01-01
      • 1970-01-01
      • 2016-07-23
      • 2015-09-05
      • 1970-01-01
      相关资源
      最近更新 更多