Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django模型中连接数据的性能优化_Python_Django_Performance_Django Models_Database Performance - Fatal编程技术网

Python django模型中连接数据的性能优化

Python django模型中连接数据的性能优化,python,django,performance,django-models,database-performance,Python,Django,Performance,Django Models,Database Performance,在我的工作中,我的django模型中经常有两个表,例如,必须连接它们以csv的形式返回这些数据。该数据不是通过外键连接的,但它们有一个用于连接它们的标识符。这是因为我们从两个不同的来源导入数据,有时会缺少对应的数据,所以在创建条目时无法连接它 我的问题是:如果您考虑到我经常必须返回这些数据这一事实,那么在性能方面连接这些数据的最佳方式是什么 方法:创建一个新模型,用标识符连接数据(如m2m)或父类,两者都连接到该模型 class OrderInvoiceConnector(models.Mode

在我的工作中,我的django模型中经常有两个表,例如,必须连接它们以csv的形式返回这些数据。该数据不是通过外键连接的,但它们有一个用于连接它们的标识符。这是因为我们从两个不同的来源导入数据,有时会缺少对应的数据,所以在创建条目时无法连接它

我的问题是:如果您考虑到我经常必须返回这些数据这一事实,那么在性能方面连接这些数据的最佳方式是什么

  • 方法:创建一个新模型,用标识符连接数据(如m2m)或父类,两者都连接到该模型
  • class OrderInvoiceConnector(models.Model):
    订单\u数据=型号。外键(订单,相关的\u名称=“发票”)
    发票\u数据=型号。外键(发票,相关的\u name=“订单”)
    
  • 方法:创建一个新模型,仅保存csv导出所需的数据。比如:
  • 类连接数据(models.Model):
    发票id=models.CharField(最大长度=255)
    国家/地区iso=models.CharField(最大长度=255)
    发票日期=models.CharField(最大长度=255)
    tax=型号。浮动字段(最大长度=255)
    price=models.FloatField()
    
    我将使用第二种变体,正如您提到的,加入将非常昂贵,并且每天都会产生数据更改。如果您创建一个只读模型,您将在一个表查询中打包用户使用的所有必需数据。您必须使用一些自动化作业填充数据,但在您提到的场景中,这看起来是可以接受的。

    下面很难给出正确的答案,但我会尝试对我将要做的事情进行评论,可能会有所帮助,但这取决于几件事。如果用户正在等待CSV文件下载,我可能会选择选项2,但这完全取决于数据更改的频率和生成所需的时间。每天使用少量数据进行几次就可以了。此外,如果用户不能在django项目中自定义此CSV,我会考虑在用户请求之前生成CSV。否则你的第一选择。话虽如此,这取决于很多事情。您能否提供更多关于性能问题的信息?DB连接是否需要几秒钟/分钟/小时。如果用户正在等待此消息?数据多久更改一次?数据每天更改一次。用户将能够从普通网站下载csv,并提供过滤选项(例如:按日期过滤)。每个站点上15万个数据集的连接需要2个小时。我将使用第二个变体,正如您提到的,连接将非常昂贵,并且每天都会产生数据更改。如果您创建一个只读模型,您将在一个表查询中打包用户使用的所有必需数据。您必须使用一些自动化作业填充数据,但在您提到的场景中,这看起来是可以接受的。是的,还有第二种选择。我希望我有足够的订单在过去的2小时内加入。仅供参考,我将实际查看SQLAlchemy正在创建的查询,并尝试找到更好的结构。即使每个表中有数百万行,您也应该获得更好的性能。