3

我想开始一个性能将成为问题的大型 cakePHP 项目。我将有一个用户表,其中包含树行为和许多与用户相关的财务数据。此应用程序将制作大量动态报告,为不同的树节点等聚合数据。

由于github上有一个易于使用的库,它将模型的数据源设置为redis,我想知道将它用于整个应用程序是否是个好主意?有没有人有这方面的经验,如果我决定依赖 redis 作为主要/唯一的数据存储可能会出现什么潜在问题?

编辑:我已经安装了 redis 并尝试将 RedisModel 用于两个具有简单关系 HasMany/BelongsTo 的模型。当我尝试简单地使用标准 AppModels 之类的模型时,它根本不起作用(Redis 错误:缺少键)。显然您不能以标准方式使用 Model->find Model->save 等。您必须改用 redis 方法(setKeyValue 等)。这意味着分页和其他 cakePHP 期货也将不起作用。所以也许对我的所有模型都使用 redisModel 不是最好的主意......

4

1 回答 1

5

我不能专门为 CakePHP 说话,但我会笼统地谈论 redis,特别是你问题的要点,它最终应该适用于你选择的框架。让我们来看看:

  • 你提到你想启动一个性能会成为问题的应用程序——我只是想提一下你应该小心你需要一个 nosql 解决方案的假设,因为这很难事先评估。Redis 非常快,但例如 MySQL 已被证明能够很好地处理数百万条记录和操作,前提是它正确配置和使用,并且如果您需要大量关系结构,它会简单得多。

  • 关于 Redis 作为主要和唯一的数据存储:

    • Redis 非常适合这项工作。据报道,Instagram存储了 3 亿个使用哈希伪分片的键值对,效果很好,虽然这不是他们使用的唯一数据存储系统,但它表明 redis 非常可靠。这个站点(堆栈溢出)也广泛使用 redis进行缓存。

    • 据报道, Redis总体上平均具有出色的连续正常运行时间(考虑到上述几点,这不足为奇)

    • 存在减轻停机时间问题的选项,在一定程度上支持复制,并且Redis Cluster即将推出以支持适当的分布式方法。

    • 您可能面临的主要问题是没有正确理解其持久性是如何工作的。在开始之前,您绝对应该阅读这篇文章和这篇文章,因为这一点很重要。简而言之,redis 不会立即将更改写入磁盘,这意味着根据您的配置,崩溃可能会导致自上次磁盘写入后几秒到几分钟的数据丢失。这可能是也可能不是问题,具体取决于您的用例;如果数据非常敏感(即财务记录),您可能需要在跳转到 redis 之前三思而后行,或者构建一个系统,其中 redis 不是专门使用而是与另一个存储系统结合使用。

  • 像 redis 这样的非关系数据存储中的关系结构意味着做更多的工作并且经常复制/非规范化数据。可以做到,但需要考虑;在您提到的问题中,您需要汇总数据以生成动态报告,您确定要为此使用 redis 吗?听起来关系数据库会以非常小的性能成本为您提供更大的灵活性。如果您事先知道您需要对数据运行复杂的查询,那么除非绝对需要,否则不要重新发明轮子可能是个好主意。

我的建议是首先更好地了解 redis 是什么以及如何工作,可能会构建自己的模型,而不是依赖他人更好地了解可以做什么和不可以做什么,然后从那里评估你想把它带到哪里。Redis 足够可靠,可以独立使用,但归根结底,明智的做法是使用正确的工具来完成正确的工作,您可能会发现应用程序中的某些内容与 Redis 配合得很好,而其他一些内容则更好更传统的存储系统。

于 2012-09-22T13:54:38.570 回答