Django + 大型数据库 : how to deal with 500m rows?

标签 django postgresql bigdata

我正在开发一个包含大量数据的网络应用程序,并且想要一些一般的技术栈建议。我是一名 Django 开发人员,但我以前从未处理过这么多数据。

对于一般性问题深表歉意,但我非常感谢一些一般性建议。如果它真的不适合 SO,而不是仅仅投票关闭它,我真的很感谢对一个论坛的建议,我可以在其中征求此建议。

我的数据库将包含三个表,其中一个表将包含大约 5 亿行(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 以将其全部保存在内存中? (哎呀。)

我知道答案真的是“试试看”,但我真的很感谢更有经验的 Django/Postgres/数据开发人员提供的任何前期建议。如果您正在开发这种形状的应用程序,您会如何处理它?<​​/p>

最佳答案

我可能没有非常清楚地理解这个问题,但这是我将如何处理它。

  • 我不会仅仅为了计算聚合而占用 elasticsearch/solr 的开销,(在我看来,当你需要 FTS、排名和其他东西时它很有用)
  • 我宁愿在 processing_date 上有一个索引,并为 last_indexing_datelast_aggregate 取另外两个字段(可能在每个组织中)并更新这些定期使用一些后台异步任务。
  • 对于实时详细信息,我会选择 last_indexing_date 并汇总该日期之后的支出,最后用 last_aggregate 汇总并更新这些字段.

不确定你的意思:

Create a usable web app that offers this information to those users

希望这有帮助:)

关于Django + 大型数据库 : how to deal with 500m rows?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28919599/

相关文章:

mysql - 两个保存点之间的嵌套事务回滚?

postgresql - 运行 postgresql 脚本时奇怪的从左到右的箭头

java - Java 中是否可以进行这种类型的搜索

sql - 在没有网络授权的情况下使用 Google Cloud SQL

python - django 动态分页

javascript - Django有没有类似now.js的框架?

postgresql - 在 docker-compose 中,如何将一个容器中的应用程序连接到另一个容器中的 postgres 数据库

hadoop - 如何用拉丁 pig 按地区分组结果?

datetime - hive 中需要 "MMM-yyyy"格式的时间戳

json - Django 版本的flask.jsonify jsonify