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

Storing entries in a very large database

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

由于遍历如此大量的条目并检查它们的值不是一个好主意,我正在考虑将条目分组在一起的方法。

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

一次存储一个,直到你绝对不能再使用,然后围绕你的特定问题设计其他东西。

SQL 是一种声明性语言,这意味着 "give me all records matching X" 不会告诉数据库服务器 如何 执行此操作。因此,即使您有数亿条记录,您也有很多方法可以帮助数据库服务器快速完成此操作。此外,基于多年的经验,RDBMS 针对此问题进行了优化,因此在某种程度上,您不会击败像 PostgreSQL.

这样的系统

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

那么让我们看看 PostgreSQL 可能通过 table 给你结果的两种方式。

第一个是顺序扫描,它遍历一系列页面,扫描每个页面的值和 returns 记录给您。对于非常小的 tables,这比任何其他方法都有效。它在大 tables 上很慢。复杂度为 O(n),其中 n 是 table 的大小,对于任意数量的记录。

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

Postgre 内部SQL 将行以固定大小分批存储为页面。它已经为您解决了这个问题。如果您尝试这样做,那么您将在成批记录中获得成批记录,这通常是导致坏事的秘诀。