背景:
我正在为业务应用程序开发Django应用程序,该应用程序接收客户数据并在仪表板上显示图表。我有一个大型数据库,其中包含原始信息,例如按客户销售的零件,我将用它来填充分析。过去,我可以将python与pandas,xlsxwriter等配合使用来很好地做到这一点,现在我正在复制此Web应用程序中过去所做的事情。我正在使用PostgreSQL数据库存储数据,然后使用Django构建可视化应用程序和Fusioncharts。为了使信息进入Postgres,我将python脚本与sqlalchemy一起使用,做得很好。
问题: 我有两种方法可以处理将要填充图表的数据。 1)我可以使用相同的脚本将数据导出到postgres,以便在导出之前按照自己的喜好排列数据。例如,在某些情况下,我需要按某个参数对数据进行分组(例如按客户),然后按列对分组进行计算。我可以为每个想要的切片执行此操作,然后将每个模型类的不同表导出到Postgres。
2)我可以将整个数据库上载到postgres,并稍后使用产生SQL查询的django命令对其进行操作。
我很早就使用python进行了调试,因为我已经做了一段时间了。我也理解django的查询很难实现。但是,使用python进行操作将意味着我将需要更多表(因为我将它们以不同的方式进行了分组),并且我不想以我所知道的方式进行操作,只是因为这样做更容易(如果上传单个数据库)从长远来看,使用django / SQL查询会更有效。
任何想法或建议都会受到赞赏。
答案 0 :(得分:1)
好吧,这是性能和灵活性之间的通常折衷。使用第一种方法,您可以获得更好的性能(您的模式只适合您要运行的确切查询),但缺乏灵活性(如果您需要添加更多查询,则说明可能不太匹配-甚至根本不匹配),其中如果您不得不重新填充数据库(可能是使用更新的模式从原始资源中填充数据库),第二种则是(希望)您具有规范化的模式,但是这种模式会使数据库服务器上的查询变得更加复杂和繁重
现在的问题是:您真的必须选择吗?您还可以同时拥有完全标准化的数据和非标准化(预处理)的数据。
作为旁注:Django ORM实际上确实是大多数“ 80/20”工具-它旨在使80%简单查询变得超级简单(比说SQLAlchemy容易得多),然后它变得有点像PITA的确如此-但没有什么能迫使您对所有内容使用django的ORM(您可以随时使用原始sql或同时使用SQLAlchemy)。
哦,是的:您的问题并不新鲜-您可能需要read about OLAP