Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

532
Visualizações
guarde objetos json grandes en postgres, Django

Tengo un modelo en db:

 class Test(models.Model): title = models.CharField(max_length=32, verbose_name='title', default='') json = models.JSONField(default=dict) ...

Obtengo los datos del frente y los guardo en la base de datos, las solicitudes llegan con bastante frecuencia. El peso promedio de un campo json es de 10 MB, pero puede variar mucho y no entiendo cómo sería mejor para mí guardarlo y darle, no hago ningún trabajo con json en el servidor. Para empezar, creo que necesito comprimir este json y guardarlo en la base de datos y, cuando se solicite recibirlo, descomprimirlo. ¿Puede aconsejarme sobre la mejor manera de ahorrar memoria y consultar el tiempo de ejecución?

Además, ¿vale la pena eliminar este json en una tabla separada para que cambiar otros datos en la tabla de prueba tome menos tiempo, o es mejor usar Test.objects.update()?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Si bien aprecio que no sea la solución más simple y ciertamente no la más rápida o fácil, sin embargo, almacenar "grandes blobs json" en la base de datos probablemente nunca sea una buena idea.

Si tiene un objeto grande y necesita representar esos datos en un modelo Django, le sugiero que haga exactamente eso.

¿En lugar de intentar guardar todo el json blob como una cadena y luego cargarlo desde la base de datos y luego en la memoria cada vez que desee leer un atributo? Hay enormes implicaciones de rendimiento en esto que le resultaría difícil mitigar sin alguna forma de almacenamiento en caché.

Si REALMENTE DEBE almacenar los datos como el json blob completo, entonces probablemente sería mejor almacenarlos en el propio sistema de archivos y luego crear un modelo que tenga un FileField en lugar de un JSONField

También podría hacer lo que sería mucho más, Pythonic / Django-esque, que sería diseccionar su objeto, cada uno de sus atributos y sus valores, y luego diseñar sus modelos para que pueda almacenar cada uno de los tipos de datos. Como un ejemplo simple:

 { 'field_a': 'string_value', 'm2m_field_b': [ { 'field_c': 6.4, 'field_d': 'other string values' } ] ... }

Tiene aquí, 2 o potencialmente más, dependiendo de la complejidad del json blob.

  1. ParentModelA 1a) field_a es un campo de cadena
  2. ChildModelA 2a) fk field to parent object 2b) field_c es un campo flotante (preferiblemente, Decimal) y está en nuestro modelo relacionado 2c) field_d es otro campo de cadena y está nuevamente en nuestro modelo relacionado.

Lo sé, suena muy complicado al principio, pero una vez que empiezas a acostumbrarte a modelar este tipo de objetos, te das cuenta de que es muy repetitivo y que no necesitarás escribir tanto código adicional.

¿Por qué irías tan lejos? ¿Parece mucho trabajo sin mucho beneficio? Para el ojo inexperto, sí, sin ofender. Lo que debe tener en cuenta es el hecho de que no puede usar las interacciones útiles de django con la base de datos, como la agregación o la captación previa y la selección relacionada, por lo que pierde muchas de las ventajas y aprovecha la API de la base de datos de django. tiene para ofrecer .

También tenga en cuenta si desea cargar uno de los valores de campo en una página simple para mostrar los datos a un usuario en una interfaz de usuario.

Con su modelo, debe cargar todo el json blob y luego mostrar la cadena simple y el valor decimal.

Si tenía un conjunto de modelos, puede recorrer los campos relacionados con djangos e incluso usar los objetos directamente en una plantilla usando la notación de puntos habitual.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda