2011-09-17 64 views
5

Mysql具有基于内存的数据引擎,这意味着它将数据保存在RAM中。基于内存的数据库可以取代缓存吗?

有两种类型,据我知道,使用存储在MySQL内存存储引擎,

一个是记忆引擎本身 这个存储引擎的不是非常酷的功能是,仅创建虚拟表,这意味着如果服务器重新启动,则数据丢失

另一个是群集存储引擎 这没有上一个引擎的缺点,它使用内存,但它也保留基于文件的数据记录。

现在的问题是,如果您的数据库已经在使用RAM来存储和处理数据,您是否需要添加另一个缓存引擎(如Memcached)以提高您的产品性能?

与Memcached相比内存引擎数据库有多快?

Memcache是​​否将任何功能添加到您的产品内存引擎数据库不?

加上内存引擎数据库为您提供了更多的功能,如能够请求查询,相比Memcached,它只会让您获得原始数据,所以Memcached就像一个数据库引擎,只支持SELECT命令。

我错过了什么吗?

回答

1

(关系数据库)和缓存服务是互补的。正如所指出的那样,它们有不同的设计目标和用例。 (然而,我发现一个数据库在后失踪的核心优势。)

Memcached的(和其他高速缓存)提供了一些好处,无法ACID数据库模型来实现。这是一个折衷,但是这种缓存是为最大分配和最小延迟而设计的。 Memcached是不是数据库:它是一个带有一些驱逐策略的分布式键值存储。因为它只是一个关键值存储,所以它可以“跳过”查询数据库数据的许多步骤 - 只需要直接支持1-1操作即可。没有加入,没有关系,单个结果等。

请记住,缓存就是这样的:缓存。它不是一个可靠的信息存储,也不提供(关系)数据库中的数据完整性/一致性。即使是可以“坚持”数据的缓存系统也不一定具有ACID保证(甚至MyISAM不完全ACID!)。一些缓存系统提供更强的同步/一致性保证; memcached不是这样一个系统。

的底线是,是因为内存缓存的设计简单的模型,它在延迟和分布战胜它运行在境界。多少?嗯,这取决于...

...首先,选择与需要功能和担保办法(ES),然后基准的方法来确定哪个(些)是合适的(或“最适合“)的任务。 (根本不需要使用缓存或“内存数据库”,或者更好的方法可能是使用“无SQL”设计)。

快乐编码。

4

这取决于你如何使用memcached。如果您使用它来缓存需要30个SQL查询构建的呈现HTML页面,那么即使通过内存数据库,它也会提高性能。

1

Memcached可以存储高达1MB的数据。它所做的就是利用数据库加载的方式,甚至不需要连接到数据库就可以获得数据。大部分网站都有少量的数据显示给用户(文本数据,而不是文件本身)。

所以要回答 - 是的,最好有Memcached,因为它可以帮助你,所以你甚至不连接到数据库,这在一开始就消除了一些开销。

另一方面,MySQL有很多可用的引擎。就个人而言,我不会使用内存引擎的原因很多 - 其中之一是数据丢失。 InnoDB是最近发布的默认MySQL引擎 - 已经将工作数据集存储在内存中(由innodb_buffer_pool变量控制),并且如果数据集可以放入内存中,它的速度非常快。 还有TokuDB引擎在缩放方面超越了InnoDB,它们都优于内存引擎。但是,缓存经常访问且很少更改的数据总是一件好事。

相关问题