【问题标题】:Can memory based database replace the need for caching?基于内存的数据库可以取代缓存吗?
【发布时间】:2011-11-19 10:22:48
【问题描述】:

Mysql 具有基于内存的数据引擎,这意味着它将数据保存在 RAM 中。

据我所知,Mysql中有两种使用内存的内存存储引擎,

一个是内存引擎本身 这个存储引擎不太酷的特性是只创建虚拟表,这意味着如果服务器重新启动,数据就会丢失

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

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

与 Memcached 相比,内存引擎数据库的速度有多快?

Memcache 是否为您的产品添加了内存引擎数据库没有的任何功能?

加上内存引擎数据库为您提供了更多功能,例如能够请求查询,而 Memcached 只能让您获取原始数据,因此 Memcached 有点像只支持 SELECT 命令的数据库引擎。

我错过了什么吗?

【问题讨论】:

    标签: php mysql performance caching memcached


    【解决方案1】:

    这取决于您如何使用 memcached。如果您使用它来缓存一个渲染的 HTML 页面,该页面需要 30 个 SQL 查询来构建,那么即使在内存数据库上,它也会给您带来性能提升。

    【讨论】:

      【解决方案2】:

      Memcached 最多可以存储 1mb 的数据。它的作用是利用数据库负载,您甚至不需要连接到数据库来向它询问数据。大多数网站都向用户显示少量数据(就文本数据而言,而不是文件本身)。

      所以回答 - 是的,拥有 Memcached 也是一个好主意,因为它可以帮助您,因此您甚至不需要连接到数据库,这在开始时会消除一些开销。

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

      【讨论】:

        【解决方案3】:

        (关系)数据库和缓存服务是互补的。正如所指出的,它们具有不同的设计目标和用例。 (但我发现帖子中缺少数据库的核心优势。)

        Memcached(和其他缓存)提供了一些在ACID 数据库模型下无法实现的好处。这是一个折衷方案,但此类缓存旨在实现最大分布和最小延迟。 Memcached 不是数据库:它是一个带有一些驱逐策略的分布式键值存储。因为它只是一个键值存储,它可以“跳过”查询数据库数据的许多步骤——代价是只直接支持 1-1 操作。没有连接,没有关系,只有一个结果等。

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

        最重要的是,由于 memcache 的简单设计和模型,它在延迟和分布方面胜过它所运行的领域。多少钱?嗯,这取决于...

        ...首先,选择具有必需特性和保证的方法,然后基准方法以确定哪些方法是合适的(或“最适合") 的任务。 (甚至可能根本不需要使用缓存或“内存数据库”,或者更好的方法可能是使用“无 SQL”设计。)

        编码愉快。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-29
          • 1970-01-01
          • 2020-04-19
          • 2017-08-26
          • 1970-01-01
          相关资源
          最近更新 更多