有没有一种好方法可以将快速变化的内存数据与大型 SQL 数据库数据混合在一起



我正在使用一种架构,该架构需要将大型(静态)表与非常频繁变化的数据混合在一起。

为了强调这一点,想象一下SO网站用户访问内部加入他们的用户数据库)。

SELECT * FROM UserProfile INNER JOIN OnlineUser (on UserProfiles.id = OnlineUser.id)

其中,用户配置文件驻留在大型SQL表中,OnlineUser是Web服务器上的动态数据。

将所有内存都占用大量空间并将所有内容放入数据库中确实会给服务器带来负担(想想就不寒而栗)。 有没有更好的方法

上帝 Jon Skeet 说 LINQ 无法处理在内存集合和数据库表之间进行联接。 他建议使用包含子句或列表,在这种情况下两者都不合适。

编辑:

SQL Server 中的内存表(PINTABLE)可以执行此操作。 由于该功能已被弃用,是否可以安全地假设SQL Server 2008会设法将其保留在内存中以减少IO?

您必须在某处执行实际的连接操作。要么将OnlineUser数据引入 SQL Server 并在那里执行联接,要么将UserProfile数据放入内存并在那里执行联接。

通常,最好让数据库服务器整理出所需的数据,并仅将其读入内存。解决此问题的一种方法是在 SQL Server 上创建一个临时表,您可以在其中放置联接操作所需的数据字段(在示例中OnlineUser.id )。

然后执行 SQL 查询以将所需的数据放入内存中。确保您具有可加快筛选速度的索引。检索到内存后,匹配两个集合(例如,将它们排序在同一键上,然后使用 linq Zip 运算符)

最新更新