如何优化含多查询调用的事件权限过滤方法?
事件系统权限过滤查询优化咨询
我的应用中有一套事件系统,用户对对象执行删除/更新/创建操作时,会在数据库中生成包含对象信息和事件类型的新事件。Event模型定义如下:
class Event(models.Model): uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) model = models.CharField(max_length=200) object_id = models.IntegerField() event_type = enum.EnumField(ModelEventType)
其中model字段为对象所属模型名称,object_id为对应对象ID。
应用存在多级别访问权限:部分对象为用户私有,部分可在团队成员间共享。因此需要根据用户权限过滤事件,仅返回其有权限访问的对象对应的事件。当前实现逻辑为:先获取用户有权访问的所有对象ID,再据此查询关联事件。
获取用户可访问对象ID的方法如下:
class Event(models.Model): .... @staticmethod def get_events_ids(request): object_ids = {} Object1 = apps.get_model("myapp", "Object1") Object2 = apps.get_model("myapp", "Object2") Object3 = apps.get_model("myapp", "Object3") Object4 = apps.get_model("myapp", "Object4") Object5 = apps.get_model("myapp", "Object5") objects1 = Object1.objects.filter(...) objects2 = Object2.objects.filter(...) objects3 = Object3.objects.filter(...) objects4 = Object4.objects.filter(...) objects5 = Object5.objects.filter(...) objects = { "Object1": objects1, "Object2": objects2, "Object3": objects3, "Object4": objects4, "Object5": objects5, } for key in objects.keys(): object_ids[key] = list(objects[key].values_list("id", flat=True)) return object_ids
该逻辑覆盖多个模型,获取各模型对象ID后,按模型和ID过滤事件:
event_objects = Event.get_events_ids() events = [] # 获取各模型对应的事件 for key in event_objects.keys(): ids = event_objects[key] events_list = qs.filter(object_id__in=ids, model=key) events.extend(list(events_list)) ids = [obj.uuid for obj in events] filtered_events = qs.filter(uuid__in=ids)
当前方案因查询数量过多导致效率低下、响应缓慢,请问是否可通过批量查询等方式优化该流程,提升响应速度?
内容的提问来源于stack exchange,提问作者Paul Miranda
相关产品推荐
相关产品推荐

