7

我有一个关于 Redis 的简单问题。如果它的性能关键在于它是在内存中的,那么为什么不能在常规 SQL 数据库上完成呢?

4

6 回答 6

9

任何 DBMS 都可以“在内存中”运行。考虑使用ramdisk。然而,大多数 DBMS(那些带有 SQL 的)并非完全在内存中运行,而是付出了很多努力来最小化磁盘 IO 和分页:DBMS 非常努力地保持“相关数据”热(在内存和缓存中) - - IO慢,慢慢。

这是因为数据库数据通常 [并且在历史上一直]比主内存大得多。那和主内存是易失性的 :-) [ACID DBMS 使用预写日志记录(到非易失性存储)和其他技术来确保数据永不损坏,即使在意外关闭的情况下也做了大量工作。 ]

一些数据库,比如 SQLite,对磁盘和内存存储使用相同的格式,即使它们明确支持内存存储。对其他 [in-memory] ​​后端的支持和内存使用调整因提供商而异。

快乐编码。

于 2011-03-16T18:02:09.493 回答
5

您可能对VoltDB感兴趣

于 2011-03-28T16:08:49.073 回答
2

您可能对TimesTen(现在是Oracle)感兴趣。

11gSQL方面有了显着的改进,尽管仍然不如Oracle.

于 2011-03-28T16:14:13.840 回答
2

关键不仅在于它在内存中,而且它还具有比 SQL DB 更简单的操作。Redis 具有使用哈希表和其他优化数据结构的简单操作,例如 GET、SET(等等)。

SQL 数据库通常需要更长的时间来计算,但是它们更灵活并且在大多数情况下更强大(就查询类型而言)。例如,您当然不能在 Redis 中运行 JOIN 查询

于 2011-03-16T18:05:00.073 回答
1

在 RAM 中的 DB 上:传统数据库最终将在 RAM 中结束

传统的数据库数据——人类交易活动的记录 [...]——不会像摩尔定律使计算机芯片变得更便宜那样快速增长

这一点有一个直接的推论,即:

将传统数据库数据完全放入 RAM 将变得更加经济实惠。

于 2011-08-11T11:46:32.583 回答
1

您可以使用某些 SQL 数据库管理系统本机地做到这一点。但也有风险。

例如,如果服务器出现故障,您可能会丢失数据。我认为您无法获得符合 ACID 的交易;任何日志文件都必须写入磁盘才能在服务器故障后幸免于难。(我想内存中的 SQL dbms 仍有可能将日志文件写入磁盘,但我自己从来没有遇到过。并不是说我看起来太多了。)

于 2011-03-16T18:13:19.060 回答