我正在与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
任何帮助将不胜感激,请让我知道,如果我需要提供更多的代码更多的澄清
谢谢
目前没有回答
相关问题 更多 >
编程相关推荐