Django+;大型数据库:如何处理500米行?
我正在开发一个包含大量数据的web应用程序,希望获得一些通用的技术建议。我是Django开发人员,但我以前没有使用过这么多数据 对于这个一般性问题,我深表歉意,但我真的希望得到一些一般性的建议。如果这样做真的不合适,而不仅仅是投票关闭它,我真的很感谢你给我一个论坛的建议,在那里我可以征求你的意见。 我的数据库将有三个表,其中一个表将有大约500万行(100GB的数据)。数据是只读的,不经常更改,每月仅更改一次 大表(5亿行)是过去五年每月支出的项目,其他表是支出机构(约1万行)和购买的项目(约4000行)。模型基本上如下所示:Django+;大型数据库:如何处理500米行?,django,postgresql,bigdata,Django,Postgresql,Bigdata,我正在开发一个包含大量数据的web应用程序,希望获得一些通用的技术建议。我是Django开发人员,但我以前没有使用过这么多数据 对于这个一般性问题,我深表歉意,但我真的希望得到一些一般性的建议。如果这样做真的不合适,而不仅仅是投票关闭它,我真的很感谢你给我一个论坛的建议,在那里我可以征求你的意见。 我的数据库将有三个表,其中一个表将有大约500万行(100GB的数据)。数据是只读的,不经常更改,每月仅更改一次 大表(5亿行)是过去五年每月支出的项目,其他表是支出机构(约1万行)和购买的项目(约4
class Organisation(models.Model):
name = models.CharField(max_length=200)
class SpendItem(models.Model):
name = models.CharField(max_length=200)
class Spend(models.Model):
spend_item = models.ForeignKey(SpendingItem)
organisation = models.ForeignKey(Organisation)
spend_value = models.FloatField()
processing_date = models.DateField()
我需要在web应用程序中提供页面,以各种方式查询汇总这些支出数据。例如,我可能希望显示每个机构的一个页面,其中包含每个月的总支出以及每种项目的总支出。或者每个项目一页,包括总支出和机构支出
我最初的计划是拥有一个Postgres后端,因为我知道数据的形状,只需通过Django ORM或原始SQL(如果需要)进行查询,以提高速度
但我开始担心:超过5亿行的聚合查询会不会太慢?我是否需要预先计算所有聚合查询?我是否也应该研究我以前从未使用过的其他技术,比如Elasticsearch,甚至BigQuery
另一个问题:这种大小的Postgres数据库(大概200GB左右,带有索引)是否可以从SSD以可接受的速度运行,或者我是否需要支付足够的RAM以将其全部存储在内存中?(eeek.)
我知道答案确实是“试试看”,但我真的非常感谢更有经验的Django/Postgres/数据开发人员提供的任何前期建议。如果您正在处理这种形状的应用程序,您将如何处理它?我可能不清楚这个问题,但以下是我将如何处理它
- 我不会仅仅为了计算总量而承担elasticsearch/solr的开销(在我看来,当你需要FTS、排名等东西时,它很有用)
- 我希望在
上有一个索引,并为处理日期
和上一个索引日期
取另外两个字段(可能在每个组织中),并使用一些后台异步任务定期更新这些字段上一个聚合日期
- 对于实时详细信息,我只需选择
并对超过该日期的支出进行聚合,最后将其与last\u index\u date
相加,并更新这些字段last\u aggregate
希望这有帮助:)确切的用例是什么?你打算如何处理这些数据?您认为elasticsearch会对您有什么帮助?(1)向对这些组织的支出方式感兴趣,但无法使用原始数据运行自己的5亿行数据库的用户提供信息(目前唯一的选择)(2)创建一个向这些用户提供此信息的可用web应用程序(3)一位朋友说ElasticSearch帮助他们使用了一个类似的web应用程序,它本质上是数据库的前端。不过,我可能完全错误地认为它在这种情况下是有用的。