GrapheneDjango,获取10000多个数据点

2024-10-04 01:33:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在与Django&;建立一个后端GraphQL服务;Graphene和我很难弄清楚最好的方法是以高效的方式获取数千个数据点

在某些情况下,我们有一个实验,有35000个数据点需要显示在绘图上。数据点存储在名为data_point的数据库表中。以下是此表的架构:

data_point_id | value | type | created_at

在我的石墨烯模式中,我有一个解析器来获取给定实验的所有数据点,如下所示

class ExperimentNode(DjangoObjectType):
    users = generic.GenericScalar()
    aliases = generic.GenericScalar()
    properties = generic.GenericScalar()
    data_points = graphene.List(DataPointType)

    class Meta:
        model = Experiment
        # what other filter fields would we want for a batch?
        filter_fields = {
            'experiment_id': ['exact']
        }
        interfaces = (graphene.relay.Node, )

    def resolve_data_points(self, info, **kwargs):
        try:
            data_points_for_experiment = DataPoint.objects.filter(experiment_id=self.experiment_id)
            data_points = []
            for data_point in data_points_for_experiment:
                value = data_point.numeric_value
                measured_at = data_point.measured_at
                attribute = data_point.measurement_type_id
                data_points.append({
                    "value": value,
                    "measured_at": measured_at,
                    "attribute": attribute
                })
            return data_points
        except Exception:
            return None

这是我的查询类

class Query(graphene.ObjectType):
    all_batches = DjangoFilterConnectionField(BatchNode)

正如预期的那样,当我运行查询时,获取所有35000个数据点需要很长时间(超过10秒)。我对石墨烯还是相当陌生,我想知道最好的办法是什么,以一种快速的方式获取所有35000点。我听说分页可能解决我的问题,但我不确定如何在Graphene/Django中实现这种分页方法。我知道Relay提供了基于光标的分页,但它将每页的最大值限制为100

任何帮助将不胜感激,请让我知道,如果我需要提供更多的代码更多的澄清

谢谢


Tags: 数据idfordatavaluefiltergenericat