Database 什么时候应该使用Memcached而不是向数据库添加列?

Database 什么时候应该使用Memcached而不是向数据库添加列?,database,caching,database-design,memcached,relational-database,Database,Caching,Database Design,Memcached,Relational Database,我希望跟踪应用程序的每个用户访问某个页面的最后日期。一种方法是在我的数据库中的users表中添加一列,并在用户每次访问页面时更新它。另一种方法是为每个用户将这些数据存储在Memcached中 我意识到我倾向于Memcached解决方案,但原因似乎不合理: users表已经有很多列了,我不想不必要地添加到其中 使用Memcached比通过创建迁移等方式向数据库中添加表更容易 那么,什么是合适的选择呢?为什么呢?Memcached可以用来存储生命周期有限的任意数据,但不应该用作数据库替换 适当的

我希望跟踪应用程序的每个用户访问某个页面的最后日期。一种方法是在我的数据库中的users表中添加一列,并在用户每次访问页面时更新它。另一种方法是为每个用户将这些数据存储在Memcached中

我意识到我倾向于Memcached解决方案,但原因似乎不合理:

  • users表已经有很多列了,我不想不必要地添加到其中
  • 使用Memcached比通过创建迁移等方式向数据库中添加表更容易

那么,什么是合适的选择呢?为什么呢?

Memcached可以用来存储生命周期有限的任意数据,但不应该用作数据库替换

适当的选择是为这个特定的业务逻辑创建一个独立的数据库表。由于此功能将引入许多写入操作,因此不要锁定可能具有其他核心功能的任何其他表(如用户表)很重要。自然,此功能将影响数据库I/O;其中,Memcached最适合于存储一个数据队列,以便由批处理过程处理

Memcached队列的基本轮廓

接下来,您的应用程序可以轻松维护受影响用户的队列列表,并设置/替换与特定用户相关的元数据

/* Application handling Memcached Queue */

[ User is in Queue ? ]________ no 
 |                             |
 | yes                        [ Append user to queue list ]
 |                             |
[ Replace user data ]         [ Set user date ]
每天或每小时的进程应该能够消化队列列表,并将用户的元数据写入数据库