我想跟踪我的应用程序的每个用户访问某个页面的最后日期。一种方法是在我的数据库中的用户表中添加一列,并在每次用户访问页面时更新它。另一种方法是为每个用户将这些数据存储在 Memcached 中。
我意识到我更喜欢 Memcached 解决方案,但出于似乎不合理的原因:
- users 表已经有很多列,我不想不必要地添加。
- 使用 Memcached 比通过创建迁移等向数据库添加表更容易。
那么这里的合适选择是什么?为什么?
我想跟踪我的应用程序的每个用户访问某个页面的最后日期。一种方法是在我的数据库中的用户表中添加一列,并在每次用户访问页面时更新它。另一种方法是为每个用户将这些数据存储在 Memcached 中。
我意识到我更喜欢 Memcached 解决方案,但出于似乎不合理的原因:
那么这里的合适选择是什么?为什么?
Memcached 可用于存储具有有限生命周期的任意数据,但不应用作数据库替换。
适当的选择是为这个特定的业务逻辑创建一个隔离的数据库表。由于此功能将引入许多写入,因此重要的是不要锁定任何其他可能具有其他核心功能的表(例如您的用户表)。自然,该功能将影响数据库 I/O;其中,Memcached 非常适合存储要由批处理处理的数据队列。
Memcached 队列的非常基本的轮廓
遵循Memcached 的协议,您的应用程序可以轻松维护受影响用户的队列列表,并设置/替换与特定用户相关的元数据。
/* Application handling Memcached Queue */
[ User is in Queue ? ]________ no
| |
| yes [ Append user to queue list ]
| |
[ Replace user data ] [ Set user date ]
每天或每小时的进程应该能够消化队列列表,并将用户的元数据写入数据库。