Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.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
Django+;大型数据库:如何处理500米行?_Django_Postgresql_Bigdata - Fatal编程技术网

Django+;大型数据库:如何处理500米行?

Django+;大型数据库:如何处理500米行?,django,postgresql,bigdata,Django,Postgresql,Bigdata,我正在开发一个包含大量数据的web应用程序,希望获得一些通用的技术建议。我是Django开发人员,但我以前没有使用过这么多数据 对于这个一般性问题,我深表歉意,但我真的希望得到一些一般性的建议。如果这样做真的不合适,而不仅仅是投票关闭它,我真的很感谢你给我一个论坛的建议,在那里我可以征求你的意见。 我的数据库将有三个表,其中一个表将有大约500万行(100GB的数据)。数据是只读的,不经常更改,每月仅更改一次 大表(5亿行)是过去五年每月支出的项目,其他表是支出机构(约1万行)和购买的项目(约4

我正在开发一个包含大量数据的web应用程序,希望获得一些通用的技术建议。我是Django开发人员,但我以前没有使用过这么多数据

对于这个一般性问题,我深表歉意,但我真的希望得到一些一般性的建议。如果这样做真的不合适,而不仅仅是投票关闭它,我真的很感谢你给我一个论坛的建议,在那里我可以征求你的意见。

我的数据库将有三个表,其中一个表将有大约500万行(100GB的数据)。数据是只读的,不经常更改,每月仅更改一次

大表(5亿行)是过去五年每月支出的项目,其他表是支出机构(约1万行)和购买的项目(约4000行)。模型基本上如下所示:

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
    相加,并更新这些字段
不知道你说的是什么意思:

创建一个向这些用户提供此信息的可用web应用程序


希望这有帮助:)

确切的用例是什么?你打算如何处理这些数据?您认为elasticsearch会对您有什么帮助?(1)向对这些组织的支出方式感兴趣,但无法使用原始数据运行自己的5亿行数据库的用户提供信息(目前唯一的选择)(2)创建一个向这些用户提供此信息的可用web应用程序(3)一位朋友说ElasticSearch帮助他们使用了一个类似的web应用程序,它本质上是数据库的前端。不过,我可能完全错误地认为它在这种情况下是有用的。