因此,如果例如我试图实现类似于Facebook的Graph API,它需要非常快速并支持数百万用户,那么使用Redis代替RDBMS有什么缺点?仅使用Redis代替RDBMS有什么缺点?
谢谢! Jonathan
因此,如果例如我试图实现类似于Facebook的Graph API,它需要非常快速并支持数百万用户,那么使用Redis代替RDBMS有什么缺点?仅使用Redis代替RDBMS有什么缺点?
谢谢! Jonathan
使用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的(非常快,很好的并发支持,低延迟,协议流水线,好轻松实现乐观并发模式,良好的可用性/复杂性比例,卓越的支持从萨尔瓦多和彼得,务实的没有废话的方法,...)
对于您的具体问题(图),我建议看看neo4J或OrientDB哪些专门设计用于存储面向图的数据。