拥有数百万条目时,PostgreSQL 如何处理性能

How does PostgreSQL deal with performance when having millions of entries

这可能是一个愚蠢的基本问题,但正如标题中所述,我想知道 PostgreSQL 在拥有数百万个条目(有可能达到十亿个条目)时如何处理性能。

更具体地说,我想在我的数据库中存储数据(音频、照片和视频)(我只存储它们的路径,文件是在文件系统中组织),但我必须决定是使用单个 table "data" 来存储所有不同类型的数据,还是使用多个 tables ("data_audio" , "data_photos", "data_videos") 来分隔这些类型。

我问这个问题的原因是我有大约 95% 的照片和 5% 的音频和视频,如果我想查询我的数据库以获取音频条目,我不想要它被所有照片条目减慢(在一千个中搜索一行必须与在一百万个中搜索不同)。所以我想知道 PostgreSQL 是如何处理这个问题的,以及是否有某种方法可以进行最佳优化。

我已经阅读了这个非常有趣且似乎相关的主题: How does database indexing work?

我应该这样做吗?

我将在我的核心 tables:

中存储的核心信息的回顾

第一个选项:

(SEARCH查询主要在DATA._timestamp和ACTIVITIES.name字段上进行USERS.id过滤后的数据)

第二个选项(仅将之前的 DATA TABLE 切换为以下三个 table,并保留所有其他 table):

附加问题: 每个用户都有一个数据库是个好主意吗? (故事情节中,能否查询数据库数据取决于你是否有权限,如果你想从两个不同的用户那里检索数据,你必须征求两个用户的权限,以及权限过程本身就是一个过程,这里不做处理,假设你查询数据库的时候,总是查询同一个用户)

我希望我已经清楚了,在此先感谢您的任何帮助或建议!

西里尔

答案:

  • PostgreSQL 拥有数百万和数十亿行,非常酷。

  • 如果不同类型的数据都具有相同的属性,并且从数据库的角度来看是相同的(与其他数据具有相同的关系tables 等),然后将它们放在一个 table 中。如果不是,使用不同的 tables.

  • 对table的索引访问速度不依赖于table的大小。

  • 如果不同用户的数据有联系,比如他们使用共同的基础table或者你希望能够为不同的用户加入table,这是最好将它们保存在同一个数据库中的不同模式中。如果无论如何都必须将它们分开,请将它们保存在不同的数据库中。

    如果您使用行级别安全性或让您的应用程序处理它,那么将不同用户的数据保存在一个 table 中也是一个选项。

    这个决定在很大程度上取决于您的用例和架构。

    警告:不要创建具有数千个数据库的集群和具有数千个模式的数据库。这会导致目录出现性能问题。