我只是认为现在通常在数据库服务器上有足够的RAM来缓存你的完整数据库为什么内存数据库中的专家 (例如TimesTen,另见维基百科页面)几年前风靡一时不被使用更多?
似乎随着时间的推移,没有更少的基于磁盘的数据库被使用,例如,现在大多数应用程序都建立在传统的理性数据库上.我原本期望相反,因为RAM已经接近很多服务器的免费.
我问这个问题,因为我刚刚阅读了堆栈溢出架构,页面上写道
这很重要,因为Stack Overflow的数据库几乎完全在RAM中,并且连接的成本仍然太高.
但是,如果使用"指针"和"集合"而不是普通的btree,我认为这不会是一个问题.Btree非常聪明地限制磁盘访问速度,例如它们交换CPU使用以减少磁盘使用.但是我们现在有匹配ram.
但我们仍然需要数据库,就像做自己的一样
锁定
死锁检测
交易记录
恢复
等等
很难.
@ S.Lott,鉴于我们都花了这么长时间选择索引,避免加入和调查数据库性能问题.肯定有更好的办法.几年前,我们被告知"内存数据库"是更好的方法.所以在我开始使用其他之前,我想知道为什么其他人不再使用它们.
(我不太可能自己使用TimesTen,因为价格很高(41,500.00美元/处理器)而且我不喜欢和Oracle销售人员交谈 - 我宁愿花时间编写代码.)
也可以看看:
内存数据库中TimesTen的替代品
有没有人发布不同的内存RDBMS之间的详细比较?
更新:
我问这个问题一个长的时间以前,这几天的Microsoft SQL Server具有" 在内存OLTP ",也就是集成到SQL Server引擎内存优化的数据库引擎.它并不便宜,但对某些工作负载来说似乎非常快.
没人真正回答这个问题"我应该何时考虑使用内存数据库以及需要注意的问题是什么?" 所以我会试一试.
在下列情况下,您应该考虑使用内存数据库:1.目标系统有要管理的数据,但没有持久性介质2.持久性数据库无法满足性能要求
对于#1,请考虑机顶盒(STB)中的电视指南.低端STB(即没有DVR功能的STB)没有持久存储,不需要持久存储.但是,一个400频道,14天电视指南的数据库是非常重要的.这里也有一个性能要求,因为数据从转发器转盘高速到达,这是"捕获它或等到转盘再次出现"的情况.但是没有必要坚持下去.我们都看到了这一点; 当您在家中断电时,当电视机返回电视指南时"很快就会提供",因为它是从发送应答器或有线电视前端进行配置的.网络路由器具有相同的特征:没有持久存储,需要快速,并且数据库可以从外部源(网络上的对等路由器,在这种情况下,重新填充路由表)进行配置.
有无数的例子:#2:军事系统中的实时目标,高频交易系统等等.
关于问题的第二部分,"需要注意的问题":有很多.
如果您需要只有内存数据库可以提供的性能,请确保您正在评估真正的内存数据库.缓存持久性数据库是不一样的.在RAM驱动器中抛出持久性数据库是不一样的.使用内存数据库固有地执行事务日志记录(如TimesTen)是不一样的(即使您登录到/ dev/null).
确保您正在评估数据库系统,而不仅仅是缓存(例如memcache).数据库系统将支持具有ACID属性的事务,多个索引选项,支持并发访问等.
关于ACID:内存数据库系统不缺少'D'(持久性).它只需要在上下文中采取.只要存储在其中的媒体是持久的,持久数据库中的事务就是持久的.对于内存数据库也是如此.在任何一种情况下,如果您关心耐久性,最好备份.
趋势似乎是积极缓存并使用数据库填充缓存.无论数据库在哪里,连接仍然很昂贵,因此首选项似乎是连接一次并将结果缓存为Memcached或Velocity.
仍然存在内存数据库并且它们被使用,但它取决于您想要使用它们的上下文.例如,SQLite通常在测试数据层时用作内存数据库.
最有可能的是,没有成熟的内存数据库产品可以用作经典数据库的完全替代品.
关系数据库是一个非常古老的概念.虽然有很多方法可以推进和开发新技术,例如.面向对象的数据库,关系数据库并没有真正改变他们的概念.不要指望事情变化太快,因为数据库在过去十年或十五年甚至更长时间内变化不大.
我认为,技术的发展并不像人们想象的那么快.新概念需要数十年才能成熟和建立.首先是数据库技术,其中成熟度比其他任何东西都重要得多.
在十年或二十年中,数据库可能与现在不同.如果内存数据库是未来 - 今天没人能说出来 - 他们只需要更多的时间来开发.