在.net的内存数据库中

我如何在.Net的内存数据库中使用SQL? 内存数据库如何工作?

内存数据库(IMDB)是一种驻留在内存中的关系数据库,它通过在主内存中存储和操作数据来消除磁盘访问。 IMDB通常具有严格的基于内存的体系结构和直接数据操作。

有点相关的东西:

  • .net / PowerShell的内存数据库很好?
  • .NET中的SQLite内存数据库备份
  • 替代.NET中的内存数据库中的TimesTen

在描述内存数据库时,应该纠正两个神话。

1)“内存数据库不像磁盘数据库那样持久”。 虽然对于更简单的内存数据库也是如此,但企业级内存数据库在提交事务时将数据保护到磁盘。 磁盘臂移动时磁盘速度很慢。 如果你考虑一下,你可以在快速磁盘上写几秒钟的千兆字节。 如果您的数据库发生了这么大的变化,您可以每天实时保护数TB。 这使得像HANA和Starcounter这样的ram数据库像磁盘数据库一样安全,而且速度非常快。 您可以随时关闭电源,检查点和恢复与基于磁盘的数据库的工作方式相同。

2)“内存数据库要快得多”。 内存数据库更快的原因仅仅是因为它们在内存中运行。 如果将传统数据库放在RAM驱动器上,则不会发生任何事情。 实际上,由于这些天的缓存通常超出了数据库大小,因此它们已经驻留在内存中。 内存数据库效率更高的原因是数据库映像被视为主内存而不是辅助内存。 这意味着现代RAM数据库在读取数据时不会将页面从磁盘映像复制到RAM。 在现代服务器中, 内存墙很快成为瓶颈。 在RAM数据库中避免这种情况。 第二个原因是,当您为比磁盘快数千倍的介质开发某些内容时,您往往不会在微秒和毫秒内增加开销,因为消耗纳秒的内容立即可见。 在磁盘规模上,没有理由在此级别优化代码。 当突然RAM价格下降(自2000年以来为98%)时,您不能只重写整个数据库引擎。

内存数据库的工作方式与普通数据库类似,但内容存储在内存而不是磁盘上。 这会导致应用程序关闭时丢失所有数据。 它们必须在每次启动时重建并填充数据。

可以在内存模式下运行的数据库示例是SQLite 。 请注意,SQLite是一个进程内数据库,您可以在应用程序中托管它。

您可以使用MemCached它是一个分布式内存对象缓存系统。 Memcached是一个内存中的键值存储,用于从数据库调用,API调用或页面呈现的结果中获取任意数据(字符串,对象)的小块。

使用memcached,您可以看到所有服务器都在查看相同的虚拟内存池。 这意味着始终存储给定项目,并始终从整个Web群集中的相同位置检索。

这是使用Data Provider for .NET访问内存数据库的教程。 您可以将SQL语句用于预测分析,地理空间,文本分析和模糊搜索。 您可以免费下载此数据库(HANA,快速版),并在具有8GB以上RAM的计算机中的虚拟机中使用它,或将其安装到MS Azure中的VM中。