Сохранение строки в SQLite много раз потребляет смешное количество дискового пространства? - PullRequest
1 голос
/ 18 февраля 2020

Через интерфейс я позволяю пользователям редактировать сообщения с помощью функции автосохранения. Каждое обновление поста сохраняется в БД. При редактировании экземпляр последнего сохранения обновляется с помощью запроса PUT.

Объем пространства, который он потребляет, однако довольно нелепый. Не обращая внимания, если обновленная строка становится длиннее или короче, пространство только увеличивается. Мой локальный файл SQLite теперь имеет более 500 МБ.

Соответствующее представление в django является подробным, но довольно стандартным, я бы сказал:

class PostDetail(APIView):
    permission_classes = [
        permissions.IsAuthenticatedOrReadOnly,
        IsOwnerOrReadOnly,
        IsOwnerOrPublishedOnly]

    def get_queryset(self):
        queryset = Post.objects.all()
        is_published = self.request.query_params.get('is_published', None)
        if is_published and is_published == 'false':
            queryset.filter(is_published=False)
        if is_published and is_published == 'true':
            queryset.filter(is_published=True)
        return queryset

    def get_object(self):
        obj = get_object_or_404(self.get_queryset(), uuid=self.kwargs.get('post_uuid', None))
        self.check_object_permissions(self.request, obj)
        return obj

    def put(
        self, 
        request, 
        post_uuid, 
        format=None):
        post = self.get_object()
        serializer = PostUpdateSerializer(post, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_200_OK)
        return Response(serializer.errors, status=status.HTTP_500_INTERNAL_SERVER_ERROR)

Я не могу на самом деле обернуть голову вокруг как отладить это? Вот почему я обращаюсь к ТАК. Любые советы?

1 Ответ

0 голосов
/ 20 февраля 2020

Для документирования этого:

Моя проблема заключалась в том, что я использовал инструмент профилирования под названием django -silk. Это сохраняло каждый SQL запрос и запрос БД, а также запись профилирования. Это занимает смешное количество дискового пространства.

Для анализа базы данных мне пришлось переключиться на postgres.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...