繁体   English   中英

在 Memory 数据库中

[英]In Memory Database

我正在使用 SqlServer 来驱动 WPF 应用程序,我目前正在使用 NHibernate 并预读取所有数据,因此出于性能原因将其缓存。 这适用于单个客户端应用程序,但我想知道 memory 数据库中是否有我可以使用的数据库,以便我可以在同一台机器上的多个应用程序之间共享信息。 理想情况下,这将位于我的 NHibernate 堆栈下方,因此我的代码不必更改。 实际上,我希望将我的数据库从服务器上的传统格式移动到客户端上的 memory 数据库中。

注意我只需要 select 功能。

如果您甚至需要将所有信息加载到 memory 中,我会感到非常惊讶。 我这么说是因为,举个例子,我目前正在开发一款 Web 应用程序,该应用程序(由于各种原因)在许多页面上加载了数千条记录。 这是 PHP + MySQL。 即便如此,它也可以在 100 毫秒内完成并渲染页面。

在您沿着这条路线走 go 之前,请确保您必须这样做。 首先使您的数据库尽可能高性能。 现在显然这包括诸如拥有适当的索引和调整数据库之类的事情,但即使是本末倒置。

首先,你需要确保你有一个良好的关系数据 model:一个适合于高性能查询的数据。 这既是艺术,也是科学。

此外,您可能喜欢 NHibernate 但ORM 并不总是最佳选择 例如,在某些极端情况下,手工编码的 SQL 会非常出色。

现在假设您有一个良好的数据 model 并假设您已经优化了索引和数据库参数,然后您已经正确配置了 NHibernate,那么只有这样您才应该考虑将数据存储在 ZCD69B4957F06CD818D82.917BF3D6198 中,并且仅当性能仍然存在时

从这个角度来看,我需要这样做的唯一时间是在需要每天执行数百万笔交易的系统上。

避免内存缓存的一个原因是它增加了很多复杂性。 您必须处理诸如缓存到期、对底层数据存储的独立更新、使用同步还是异步更新、如何为客户端提供一致(如果不是最新)数据视图、如何处理等问题具有故障转移和复制等功能。 需要付出巨大的复杂性成本。

假设您已完成上述所有操作并且仍然需要它,那么在我看来,您需要的是缓存或网格解决方案。 这是Java 网格/集群解决方案的概述,但其中许多(例如 Coherence、memcached)也适用于.Net。 .Net 的另一个选择是Velocity

需要指出并强调的是,像 NHibernate 这样的东西只有在没有任何外部更新数据库并且只有一个启用 NHibernate 的进程(除非集群解决方案)的情况下是一致的。 如果两台不同 PC 上的两个桌面应用程序都使用 NHibernate 更新同一个数据库,则缓存将无法正常工作,因为持久性单元根本不会知道另一个正在进行的更改。

您可以使用HANA,快递版。 您可以免费下载它,它是内存中的、柱状的,并允许进一步的分析功能,例如文本分析、地理空间或预测。 您还可以使用 ODBC、JDBC、node.js hdb 库、Z50780F47F65800D47D60BC4 等访问

http://www.db4o.com/可以成为你的朋友!

Velocity是一个进程外的 object 缓存服务器,由 Microsoft 设计,几乎可以满足您的需求,尽管目前它只是 CTP 形式。

我相信memcached也有包装器,也可以用来缓存对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM