在内存中处理SQL数据?

时间:2009-08-23 21:35:07

标签: c# asp.net sql-server-2005

我有表和很多sotred程序可以使用sql数据库 出于演示目的,我想将数据加载到内存中(也许我可以在会话中存储数据集 - 限制因此服务器内存上限不会出现问题吗?)来自我的sql表并使用我的存储过程对其进行操作。

有可能吗?或者我需要重写所有存储过程,甚至用代码处理数据集替换它们?

5 个答案:

答案 0 :(得分:1)

存储过程存储在数据库中。在数据库服务器中,没有办法制作其中一个,在Web服务器上运行一些内存结构 - 一个完全不同的地方!

你要求做的有点像是说你点了一份比萨饼,现在已经送到你家了,你想要披萨店为你转动地壳,而没有披萨离开你的房子。如果没有一些可以选择性地扭曲时空连续性甚至可能影响时间旅行的先进技术,这种情况永远不会发生。

如果您必须在家中更换比萨饼,您必须订购新比萨饼,或者使用自己的工具自行修改。

答案 1 :(得分:0)

如果您希望SQL Server在内存中管理您的表,则无法保证。

您可以创建一个表变量并用数据集填充它,它可能会存储在内存中。

查看此答案以获取更多信息:

Does MS-SQL support in-memory tables?

另外,通过一些服务器配置,您可以将tempdb放入ramdisk,这样可以有效地为您提供操作的余地,而不仅仅是使用表变量和希望,但您可以将数据集存储在临时表中并确保它将在RAM中。查看这篇微软的文章:

http://support.microsoft.com/?scid=kb;en-us;917047&x=17&y=9

编辑:我希望如果数据集适合服务器内存(及其配置的每个进程限制),它将存储在服务器的内存中。但这只是一个有根据的猜测,因为我不熟悉ASP.NET的架构

答案 2 :(得分:0)

理论上,您可以将整个数据库加载到内存中,甚至可以为每个会话存储数据库的副本。这是否是一个合理的事情,是一个不同的讨论。我听说的所有成功的ASP应用程序都是无状态的。

绝对不可能让SQL Server通过Transact-SQL过程或任何其他技术操作ADO.Net数据集所在的进程内存。您将不得不在ASP.Net应用程序中将所有过程重写为CLR方法,以便对ADO.Net数据集进行操作。

答案 3 :(得分:0)

您是否考虑过像SQLite这样的内存数据库?查看此SO线程的my answer。还有其他选择。

答案 4 :(得分:0)

事实上,你可以做到这一点。这很愚蠢但可能。

  1. 将所有表从SQL Server加载到app。
  2. 创建包含数据的XML文档。
  3. 将XML发送到SQL存储过程(您必须创建新的存储过程)并对其进行处理
  4. 谈论比萨饼,这就像订购所有可能的配料从Domino送到你家,你打开所有盒子,重新排序它们,然后将evrithing送回Domino以制作你想要的披萨。

    祝你好运:D