内存数据库的用例是啥? [关闭]
Posted
技术标签:
【中文标题】内存数据库的用例是啥? [关闭]【英文标题】:What are the use cases of an in-memory database? [closed]内存数据库的用例是什么? [关闭] 【发布时间】:2013-08-20 18:06:34 【问题描述】:我正在研究 HSQLDB,它似乎将表存储在内存中,除非您另有说明。这对我来说听起来像是一个可怕的想法,但显然人们并不经常使用这个数据库。
如果您将数据库数据存储在内存中,如果您的应用程序进程死了会发生什么?当您再次启动应用程序时,您究竟希望拥有相同的数据库?
数据库用于持久化数据,那么为什么要将整个数据库存储在易失性内存中而不是持久化在文件系统上呢?我在这里缺少这样一个数据库的用例吗?
【问题讨论】:
你认为 memcached 是什么?内存数据库...您不会将银行数据库存储在仅内存数据库中,但您可以使用仅内存数据库作为快速缓存。 当持久存储 IO 非常昂贵时,您会使用它。想象一下某种传感器,它必须向卫星发送数据。或消耗性电子设备,例如导弹或运行 MINIX 3 的繁忙网络服务器;)在任何情况下,您总是可以偶尔刷新到存储空间。 【参考方案1】:我相信,它的工作方式是有一个完全独立的进程,可以是守护进程或服务,具体取决于您的操作系统,即数据库。
这个进程负责数据库,它很可能会以特定的时间间隔“备份”到您的硬盘上。该进程还处理来自其他进程(即您的应用程序)的数据请求。
将数据库缓存在内存中比在发出每个请求时从文件中读取数据库要快得多。 (如果您怀疑,请查看硬盘驱动器和内存的读/写时间)
【讨论】:
哦,好吧,我不知道定期缓存到磁盘。是的,从性能的角度来看,我绝对可以理解这种可取性。还有一个问题:此类数据库通常如何处理从磁盘上缓存的内容中恢复数据?似乎如果您定期缓存,由于崩溃和最后一次缓存到磁盘之间的时间,在恢复时总会有一些数据丢失 @dsw88 我不知道它多久将更改写入磁盘,它可以在收到查询后立即执行。数据库必须停止运行的原因只有几个,我通常猜测是服务器重新启动。但是程序会收到通知(或通过其他方式知道它正在关闭),并有机会写入磁盘。整个服务器可能会崩溃并停机,这不太可能,但可能会导致数据丢失。以上是关于内存数据库的用例是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
cudaGraphicsGLRegisterImage中cudaGraphicsRegisterFlagsWriteDiscard的用例是啥?