我正在为我的API使用Django REST框架,昨天我想看看它如何适用于大数据.我找到了关于如何描述你的请求的教程(由Tom Christie编写),我发现对于10,000个用户,我的请求花费了惊人的2:20分钟.
大部分时间花在序列化对象上(大约65%),所以我想知道我该怎样做才能加快速度?
我的用户模型实际上扩展了默认的django模型,因此使用.values()不起作用,因为我也没有得到嵌套模型(即使它更快了).
任何帮助将不胜感激 :)
编辑
我在检索我的查询集时已经在使用.select_related(),它已经改善了我的时间,但只有几秒钟.总查询数是10,所以我的问题不在于数据库访问.
另外,我使用.defer(),以避免在此请求中不需要的字段.这也提供了一个小的改进,但还不够.
编辑#2
Models
from django.contrib.auth.models import User
from django.db.models import OneToOneField
from django.db.models import ForeignKey
from userena.models import UserenaLanguageBaseProfile
from django_extensions.db.fields import CreationDateTimeField
from django_extensions.db.fields import ModificationDateTimeField
from mycompany.models import MyCompany
class UserProfile(UserenaLanguageBaseProfile):
user = OneToOneField(User, related_name='user_profile')
company = ForeignKey(MyCompany)
created = CreationDateTimeField(_('created'))
modified = ModificationDateTimeField(_('modified'))
Run Code Online (Sandbox Code Playgroud)
Serializers
from django.contrib.auth.models import User
from rest_framework import serializers
from accounts.models import UserProfile
class UserSerializer(serializers.ModelSerializer):
last_login = serializers.ReadOnlyField()
date_joined = serializers.ReadOnlyField() …Run Code Online (Sandbox Code Playgroud) 我正在尝试用单个容器创建一个Kubernetes容器,该容器上装有两个外部卷。我的.yml pod文件是:
apiVersion: v1
kind: Pod
metadata:
name: my-project
labels:
name: my-project
spec:
containers:
- image: my-username/my-project
name: my-project
ports:
- containerPort: 80
name: nginx-http
- containerPort: 443
name: nginx-ssl-https
imagePullPolicy: Always
volumeMounts:
- mountPath: /home/projects/my-project/media/upload
name: pd-data
- mountPath: /home/projects/my-project/backups
name: pd2-data
imagePullSecrets:
- name: vpregistrykey
volumes:
- name: pd-data
persistentVolumeClaim:
claimName: pd-claim
- name: pd2-data
persistentVolumeClaim:
claimName: pd2-claim
Run Code Online (Sandbox Code Playgroud)
我正在使用“持久卷”和“持久卷声明”,例如:
PV
apiVersion: v1
kind: PersistentVolume
metadata:
name: pd-disk
labels:
name: pd-disk
spec:
capacity:
storage: 250Gi
accessModes:
- ReadWriteOnce
gcePersistentDisk: …Run Code Online (Sandbox Code Playgroud) 我试图创建具有DRF 3.0动态字段串行,作为解释在这里。我应该为POST,GET和OPTIONS请求返回不同的字段。
但是,似乎当我向服务器发出OPTIONS请求时,序列化器会在中以'POST'调用request.method。我也研究了request._method,但这是同一回事。那么,如何区分“ POST”和“ OPTIONS”?
谢谢。
我正在尝试在我的容器上安装一个永久磁盘,该容器运行Postgres自定义映像.我正在使用Kubernetes并遵循本教程.
这是我的db_pod.yaml档案:
apiVersion: v1
kind: Pod
metadata:
name: lp-db
labels:
name: lp-db
spec:
containers:
- image: my_username/my-db
name: my-db
ports:
- containerPort: 5432
name: my-db
volumeMounts:
- name: pg-data
mountPath: /var/lib/postgresql/data
volumes:
- name: pg-data
gcePersistentDisk:
pdName: my-db-disk
fsType: ext4
Run Code Online (Sandbox Code Playgroud)
我使用命令创建磁盘gcloud compute disks create --size 200GB my-db-disk.
但是,当我运行pod时,删除它,然后再次运行它(就像在教程中一样)我的数据不会持久化.
我尝试了这个文件的多个版本,包括PersistentVolumes和PersistentVolumeClaims,我尝试更改mountPath,但没有成功.
用于创建Postgres图像的Dockerfile:
FROM ubuntu:trusty
RUN rm /bin/sh && \
ln -s /bin/bash /bin/sh
# Get Postgres
RUN echo "deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main" >> /etc/apt/sources.list.d/pgdg.list
RUN …Run Code Online (Sandbox Code Playgroud)