将条目存储在非常大的数据库中

时间:2016-07-26 09:13:30

标签: python django database postgresql saas

我正在编写一个Django应用程序,该应用程序将包含该站点用户输入的条目。现在假设一切顺利,我得到了预期的访客数量(不太可能,但我正在计划未来)。这将在单个PostgreSQL数据库中产生数亿个条目。

通过迭代这么多条目并检查它们的值不是一个好主意,我正在考虑将条目分组在一起的方法。

将条目分组到(比方说)100是否可以更好地存储这么多条目?或者有更好的方法可以优化它吗?

1 个答案:

答案 0 :(得分:1)

一次存储一个,直到你完全不能再这样做,然后围绕你的具体问题设计其他东西。

SQL是一种声明性语言,意思是“给我所有匹配X的记录”并不告诉数据库服务器如何这样做。因此,即使您拥有数亿条记录,也有很多方法可以帮助数据库服务器快速完成此任务。此外,RDBMS在很多年的经验中针对这个问题进行了优化,所以在某种程度上,你不会打败像PostgreSQL这样的系统。

正如他们所说,过早优化是万恶之源。

因此,让我们看看PostgreSQL可能通过表格的两种方式来为您提供结果。

第一个是顺序扫描,它在一系列页面上进行迭代,扫描每个页面的值并将记录返回给您。对于非常小的表,这比任何其他方法都更好。大型桌子很慢。复杂度为O(n),其中n是表的大小,适用于任意数量的记录。

所以第二种方法可能是索引扫描。这里PostgreSQL遍历b树索引中的一系列页面以查找记录。复杂度是O(log(n))来查找每条记录。

内部PostgreSQL以固定大小批量存储行,作为页面。它已经为你解决了这个问题。如果你尝试做同样的事情,那么批量记录中就会有批量记录,这通常是坏事的处方。