基于内存的数据库可以取代缓存的需要吗?

Yas*_*984 5 php mysql performance memcached caching

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

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

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

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

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

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

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

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

我错过了什么吗?

小智 1

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

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

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

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

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

快乐编码。