【问题标题】:Manipulate SQL data in memory?操作内存中的 SQL 数据?
【发布时间】:2010-11-22 02:55:16
【问题描述】:

我有表和许多可与 sql 数据库一起使用的复杂程序。
出于演示目的,我想从我的 sql 表中将数据加载到内存中(也许我可以将其存储在会话中的数据集 - 演示是有限的,因此服务器内存上限不会成为问题?)并使用我的存储过程对其进行操作。

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

【问题讨论】:

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


    【解决方案1】:

    如果您希望 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 的架构

    【讨论】:

    • 它不必在 SQL 服务器的内存中,而是在 ASP 服务器的内存中。我只想从 sql 中读取初始数据,填写数据集等内存表并对其进行操作,但我想使用现有的存储过程对其进行操作。如果不可能,我该怎么做才能避免重写所有存储过程?
    • @lupital 问题是此时数据集在 asp.net 的内存中,而不是在 sql server 的内存中,所以您现在必须不断地在 sql server 之间传输数据来操作它。假设您的意思是 .net 的 DataSet 类?
    • @KeeperOfTheSoul,我只需要在初始数据集填充后从 sql server 传输数据。所有操作都将在数据集上。当会话结束时,数据集也将消失。
    【解决方案2】:

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

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

    【讨论】:

    • 你真的可以在 SQL Server 上做到这一点吗? (使整个数据库驻留在内存中)
    • 如果数据库适合内存,当然,SQL Server 会加载每个被命中的页面,并且永远不会驱逐它们。
    • “为每个会话存储一个数据库副本”对我来说很重要。怎么可能做到?任何在线文档?
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      存储过程存储在数据库中。没有办法让它们中的一个,一直在 DB 服务器中,在 Web 服务器上的一些内存结构上运行——一个完全不同的地方!

      您要求做的有点像说您点了一份比萨饼,现在它已送到您家,您希望比萨饼店在不离开您家的情况下即时为您更换外皮.如果没有一些非常先进的技术可以选择性地扭曲时空连续体,甚至可能影响时间旅行,这将永远不会发生。

      如果您必须在披萨到家后更换披萨,您要么必须订购新披萨,要么使用自己的工具自行修改。

      【讨论】:

      • 但是...但是我想要一个新的外壳:(
      【解决方案5】:

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

      1. 您将所有表从 SQL Server 加载到应用程序中。
      2. 创建包含数据的 XML 文档。
      3. 将 XML 发送到 SQL 存储过程(您必须创建新的)并处理它

      说到比萨,这就像订购所有可能的配料,从多米诺送到你家,你打开所有盒子,重新排序,然后把所有东西送回多米诺,让你做你想要的比萨。

      祝你好运:D

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-08
        • 2015-05-04
        • 1970-01-01
        • 2016-11-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多