我正在寻找存储用户的活动,但我不确定在哪里存储它。我不认为数据库是一个选择,因为它会非常大。我想知道 Facebook、Dropbox 等网站如何记住特定用户的所有活动。并且它不能存储在会话中,因为这不是特定于会话的,而是特定于用户的。
请帮我提出你的建议。
我正在寻找存储用户的活动,但我不确定在哪里存储它。我不认为数据库是一个选择,因为它会非常大。我想知道 Facebook、Dropbox 等网站如何记住特定用户的所有活动。并且它不能存储在会话中,因为这不是特定于会话的,而是特定于用户的。
请帮我提出你的建议。
如果您愿意,通常可以Django Admin Logs
用于此类活动。
通常,Django 会跟踪管理操作,例如创建、更新或删除现有记录。它具有以下结构:
from django.contrib.admin.models import LogEntry
LogEntry.objects.log_action(
user_id = ...,
content_type_id = ...,
object_id = ...,
object_repr = ....,
change_message = ...,
action_flag = ...
)
我在我的系统中使用它作为记录器,并跟踪每一个动作。通常,Django 会记录通过管理表单完成的插入、更新或删除操作,而我会记录我的手写视图和表单操作。此外,您可以使用信号捕获用户操作,例如登录/注销。
我定义了新的动作标志。Django 使用 3 个标志:1 个用于插入,2 个用于更新,3 个用于删除。我用我的动作标志扩展了该列表。
正如我所说,使用它的好处是,您不需要处理默认的 Django Admin 表单以及使用这些表单执行的任何操作。
您可能想查看django-activity-stream,它是活动流规范的实现。这会将操作列表存储在数据库中,如果您对此感兴趣,则允许以下用户/实体提供类似于 Facebook 的内容。
但是,正如您所提到的,这最终可能会产生大量数据,这对于传统的单一数据库方法来说可能有点多。我不确定 Twitter 等网站如何处理它,但除非您计划快速扩展,否则标准数据库方法可能会持续一段时间。