Grz*_*tyl 3 cakephp redis cakephp-2.0
我想开始一个大的cakePHP项目,性能将成为一个问题.我将有一个用户表作为树行为和许多与用户相关的财务数据.此应用程序将生成大量动态报告,聚合不同树节点的数据等.
由于github上有一个易于使用的库,它将模型的数据源设置为redis,我想知道将它用于整个应用程序是否是一个好主意?是否有人有过这方面的经验,如果我决定依赖redis作为主要/唯一的数据存储,那么可能存在哪些潜在问题?
编辑:我已经安装了redis并试图将RedisModel用于两个简单关系HasMany/BelongsTo的模型.当我试图简单地使用像标准AppModels这样的模型 - 它根本不会工作(Redis错误:缺少键).显然你不能以标准的方式使用Model-> find Model-> save等.您必须使用redis方法(setKeyValue等).这意味着分页和其他cakePHP期货也将无效.因此,对我的所有模型使用redisModel可能不是最好的主意......
我不能特别代表CakePHP,但我会谈到redis,特别是你的问题的要点,它应该适用于你最终的选择框架.让我们来看看:
你提到要启动一个应用程序,性能将是一个问题-我只是想提一提,你应该小心,你将需要解决的NoSQL的假设,因为这是很难事先评估.Redis是快速的,但是MySQL已经被证明能够处理数百万条记录和操作,只要它被正确配置和使用,并且如果你需要大量的关系结构,它就会简单得多.
关于Redis作为主要且唯一的数据存储:
Redis对于这项工作非常稳定.据报道,Instagram 使用哈希存储了3亿个伪分片的键值对,效果很好,虽然它不是他们使用的唯一数据存储系统,但显示redis非常可靠.这个站点(Stack Overflow)也广泛使用redis进行缓存.
据报道,Redis的平均连续正常运行时间也非常出色(考虑到上述情况,这应该不会令人感到意外)
存在用于缓解停机问题的选项,在某种程度上支持复制,并且即将推出Redis Cluster以支持适当的分布式方法.
您可能面临的主要问题是无法正确理解其持久性如何工作.你绝对应该阅读这和这文章你之前开始,因为这一点是很重要的.简而言之,redis不会立即将更改写入磁盘,这意味着根据您的配置,崩溃可能导致数据丢失,范围从上次磁盘写入后的几秒到几分钟.根据您的使用情况,这可能是也可能不是问题; 如果数据非常敏感(即财务记录),您可能需要在跳转到redis之前三思而后行,或构建一个不专门使用redis而是与另一个存储系统结合使用的系统.
像redis这样的非关系数据存储中的关系结构意味着做更多工作并且经常复制/非规范化数据.它可以做到,但这是需要考虑的事情; 在你的问题中,你提到你需要聚合数据来生成动态报告,你确定要使用redis吗?听起来像关系数据库会以非常小的性能成本为您提供更大的灵活性.如果你事先知道你需要对你的数据进行复杂的查询,那么除非你绝对需要,否则不要重新发明轮子是个好主意.
我的建议是首先对redis是什么以及如何工作有一个更好的感觉,可能构建自己的模型,而不是依赖其他人来更好地理解可以做什么和不能做什么,并从那里评估你想要的地方.Redis足够可靠,可以独立使用,但在一天结束时,使用正确的工具来做正确的工作是明智的,你可能会发现你的应用程序的一些东西可以很好地使用redis,而其他一些东西更适合使用redis.更传统的存储系统.