当前位置: 首页 > 知识库问答 >
问题:

对于PostgreSQL表来说,多大太大?

景建业
2023-03-14

我正在为我的公司设计一个RoR项目,我们的开发团队已经遇到了一些关于设计的争论,特别是数据库。

我们有一个名为消息的模型,需要持久化。这是一个非常非常小的模型,除了 id 之外只有三个 db 列,但是当我们投入生产时,可能会有很多这样的模型。我们每天看到多达 1,000,000 次插入。模型将只能由其上的两个外键搜索,这些外键可以索引。同样,这些模型永远不必被删除,但我们也不必在它们大约三个月大后保留它们。

那么,我们想知道的是,在 Postgres 中实现此表是否会带来严重的性能问题?有没有人有使用非常大的SQL数据库的经验来告诉我们这是否会成为一个问题?如果是这样,我们应该选择什么选择?

共有2个答案

左丘耀
2023-03-14

另一种显著提高表查询速度的方法是

此外,对于非常大的表,最好在外键上创建索引。

例子:

  1. 假设我们在名为ccbank的数据库中有一个名为investment的表
  2. 假设查询中最常用的索引是(bankid,record_date)

以下是创建和群集索引的步骤:

  1. psql-c"删除索引investment_bankid_rec_dt_idx;"ccbank
  2. psql-c"创建投资指数investment_bankid_rec_dt_idx(ban孩子,record_date);"
  3. psql-c"集群投资investment_bankid_rec_dt_idx;"
  4. 真空数据库-d ccbank-z-v-t投资

在步骤 1-2 中,我们将旧索引替换为新的优化索引。在第 3 步中,我们对表进行聚类:这基本上将数据库表按索引的物理顺序排列,以便当 PostgreSQL 执行查询时,它会缓存最有可能的下一行。在步骤 4 中,我们清空数据库以重置查询计划程序的统计信息。

西门安民
2023-03-14

每个表的行数本身不会成为问题。

所以粗略地说,90天每天100万行是9000万行。在不知道你在做什么的所有细节的情况下,我看不出Postgres有什么理由不能处理这个问题。

根据您的数据分布,您可以混合使用索引、过滤索引和某种表分区来加快速度,一旦您发现可能存在或可能不存在性能问题。据我所知,您在任何其他RDMS上的问题都是一样的。如果您在一个过程中只需要3个月的数据设计来修剪您不再需要的数据。这样,您将在表上拥有一致的数据量。您很幸运,您知道将存在多少数据,根据您的数据量测试它,看看您会得到什么。测试一个有9000万行的表可能很容易:

select x,1 as c2,2 as c3
from generate_series(1,90000000) x;

https://wiki.postgresql.org/wiki/FAQ

Limit   Value
Maximum Database Size       Unlimited
Maximum Table Size          32 TB
Maximum Row Size            1.6 TB
Maximum Field Size          1 GB
Maximum Rows per Table      Unlimited
Maximum Columns per Table   250 - 1600 depending on column types
Maximum Indexes per Table   Unlimited
 类似资料:
  • 我在cassandra设置中有“commitlog_segment_size_in_mb: 32”,但下面的错误表示最大尺寸为16777216,约为16mb。我在看修复下面错误的正确设置吗? 我指的是基于 http://mail-archives.apache.org/mod_mbox/cassandra-user/201406.mbox/<53A40144.2020808@gmail.com>中

  • 问题内容: 我正在构建同时使用HTTP内容和HTTP标头发送和接收数据的AJAX应用程序。是否存在由于HTTP标头太大而无法从HTTP标头接收的数据的问题?如果是,限制是什么,并且在所有浏览器中的行为都一样吗? 我知道从理论上讲HTTP头的大小没有限制,但是在 实践中,有 什么意义呢,在某些平台,浏览器或客户端计算机或计算机上安装的某些软件下,我可能会遇到问题。我正在寻找有关使用HTTP标头的安全

  • 我在持久化LocalDate字段[在列中使用VARCHAR(20)类型]时收到以下错误: 字段定义如下: 我使用的是spring data starter(1.5.9版本)。它在内部使用hibernate 5.0.12。 根据博文https://www.thoughts-on-java.org/hibernate-5-date-and-time/ Hibernate 5,支持Java 8特性(Da

  • 我从quarkus开始,我的构建本机速度太慢(超过一个小时,并已退出内存错误)。我删除了quarkus

  • 我正在开发一个必须打印标签的应用程序。我使用的标签打印机是Brother QL-570。标签宽度是66mm,标签长度需要大约45mm。我遇到的问题是,我无法配置应用程序以实际打印标签。每次这样做时,我都会收到一条警告,说明文档大小对于打印机来说太大。无论我尝试将打印文档的大小更改为什么大小,我总是收到一条警告,说明文档为90mm x 29mm,对于标签打印机来说太大了。 以下是我的一个尝试: 有人