我有一个关于 Redis 的简单问题。如果它的性能关键在于它是在内存中的,那么为什么不能在常规 SQL 数据库上完成呢?
6 回答
任何 DBMS 都可以“在内存中”运行。考虑使用ramdisk。然而,大多数 DBMS(那些带有 SQL 的)并非完全在内存中运行,而是付出了很多努力来最小化磁盘 IO 和分页:DBMS 非常努力地保持“相关数据”热(在内存和缓存中) - - IO慢,慢慢。
这是因为数据库数据通常 [并且在历史上一直]比主内存大得多。那和主内存是易失性的 :-) [ACID DBMS 使用预写日志记录(到非易失性存储)和其他技术来确保数据永不损坏,即使在意外关闭的情况下也做了大量工作。 ]
一些数据库,比如 SQLite,对磁盘和内存存储使用相同的格式,即使它们明确支持内存存储。对其他 [in-memory] 后端的支持和内存使用调整因提供商而异。
快乐编码。
您可能对VoltDB感兴趣
您可能对TimesTen
(现在是Oracle
)感兴趣。
在11g
其SQL
方面有了显着的改进,尽管仍然不如Oracle
.
关键不仅在于它在内存中,而且它还具有比 SQL DB 更简单的操作。Redis 具有使用哈希表和其他优化数据结构的简单操作,例如 GET、SET(等等)。
SQL 数据库通常需要更长的时间来计算,但是它们更灵活并且在大多数情况下更强大(就查询类型而言)。例如,您当然不能在 Redis 中运行 JOIN 查询
在 RAM 中的 DB 上:传统数据库最终将在 RAM 中结束:
传统的数据库数据——人类交易活动的记录 [...]——不会像摩尔定律使计算机芯片变得更便宜那样快速增长。
这一点有一个直接的推论,即:
将传统数据库数据完全放入 RAM 将变得更加经济实惠。
您可以使用某些 SQL 数据库管理系统本机地做到这一点。但也有风险。
例如,如果服务器出现故障,您可能会丢失数据。我认为您无法获得符合 ACID 的交易;任何日志文件都必须写入磁盘才能在服务器故障后幸免于难。(我想内存中的 SQL dbms 仍有可能将日志文件写入磁盘,但我自己从来没有遇到过。并不是说我看起来太多了。)