因此,例如,如果我正在尝试实现类似于 Facebook 的 Graph API 的东西,需要非常快速并支持数百万用户,那么仅使用 Redis 而不是 RDBMS 有什么缺点?
谢谢!乔纳森
因此,例如,如果我正在尝试实现类似于 Facebook 的 Graph API 的东西,需要非常快速并支持数百万用户,那么仅使用 Redis 而不是 RDBMS 有什么缺点?
谢谢!乔纳森
使用 Redis 而不是经典的 RDBMS 有很多潜在的好处和潜在的缺点。他们确实是非常不同的野兽。
只关注潜在的缺点:
Redis 是一种内存存储:所有数据都必须适合内存。RDBMS 通常将数据存储在磁盘上,并将部分数据缓存在内存中。使用 RDBMS,您可以管理比内存更多的数据。使用 Redis,你不能。
Redis 是一个数据结构服务器。没有查询语言(只有命令),也不支持关系代数。您不能提交即席查询(就像您可以在 RDBMS 上使用 SQL 一样)。开发人员应该预见到所有的数据访问,并且必须设计适当的数据访问路径。失去了很多灵活性。
Redis 提供了 2 个持久性选项:常规快照和仅附加文件。它们都不像真正的事务服务器那样安全,提供重做/撤消日志记录、块校验和、时间点恢复、闪回功能等......
Redis 仅在实例级别提供基本安全性(在访问权限方面)。RDBMS 都提供细粒度的每个对象访问控制列表(或角色管理)。
唯一的 Redis 实例是不可扩展的。它仅以单线程模式在一个 CPU 内核上运行。要获得可扩展性,必须部署并启动多个 Redis 实例。分发和分片在客户端完成(即开发人员必须照顾它们)。如果将它们与唯一的 Redis 实例进行比较,大多数 RDBMS 提供了更高的可扩展性(通常在连接级别提供并行性)。它们是多处理的(Oracle、PostgreSQL、...)或多线程的(MySQL、Microsoft SQL Server、...),利用了多核机器。
在这里,我只描述了主要的缺点,但请记住,使用 Redis 也有很多好处(非常快、良好的并发支持、低延迟、协议流水线、易于实现乐观并发模式、良好的可用性/复杂性比, Salvatore 和 Pieter 的大力支持, 务实的严肃方法, ...)
对于您的特定问题(图表),我建议您查看专为存储面向图表的数据而设计的 neo4J 或 OrientDB。
我有一些补充:redis 中存在值长度限制。使用redis的时候,总是想着自己的redis K,V大小,尤其是在redis集群中