【发布时间】:2013-02-06 17:29:32
【问题描述】:
我希望存储用户的活动,但我不确定将其存储在哪里。我不认为数据库是一个选择,因为它会非常大。我想知道 Facebook、Dropbox 等网站如何记住特定用户的所有活动。并且它不能存储在会话中,因为这不是特定于会话而是特定于用户。
请帮助我提出您的建议。
【问题讨论】:
标签: django django-models
我希望存储用户的活动,但我不确定将其存储在哪里。我不认为数据库是一个选择,因为它会非常大。我想知道 Facebook、Dropbox 等网站如何记住特定用户的所有活动。并且它不能存储在会话中,因为这不是特定于会话而是特定于用户。
请帮助我提出您的建议。
【问题讨论】:
标签: django django-models
如果您愿意,通常可以使用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 会记录在管理表单上完成的插入、更新或删除操作,并且我会记录我的手写视图和表单操作。此外,您还可以使用signals 捕获用户操作,例如登录/注销。
我定义了新的动作标志。 Django 使用 3 个标志:1 个用于插入,2 个用于更新,3 个用于删除。我用我的动作标志扩展了该列表。
使用它的好处是,正如我所说,您不需要处理默认的 Django Admin 表单以及您使用这些表单执行的任何操作。
【讨论】:
log_actions 更改为我的模型“实例”吗?所以我可以跟踪我的自定义模型活动?
action_flag 有 3 个值; 1: insert, 2: update, 3: delete。使用您的自定义操作扩展它并将您希望的所有内容保存到此表中
您可能想查看django-activity-stream,它是activity streams spec 的实现。这会在数据库中存储操作列表,并允许以下用户/实体提供类似于 Facebook 的内容(如果您对此感兴趣)。
但是,正如您所提到的,这最终可能会产生大量数据,这对于传统的单一数据库方法来说可能有点多。我不确定 Twitter 等网站如何处理它,但除非您计划快速扩展,否则标准数据库方法可能会持续一段时间。
【讨论】: