我正在为我的公司设计一个RoR项目,我们的开发团队已经就设计,特别是数据库进行了一些争论。
我们有一个名为Message
的模型需要持久化。这是一个非常非常小的模型,除了id之外只有三个db列,但是当我们开始生产时可能会有很多这样的模型。我们每天看多达1,000,000次插入。只能通过两个可以索引的外键来搜索模型。同样,模型永远不会被删除,但我们也不必在它们大约三个月后保留它们。
那么,我们想知道的是,如果在Postgres中实现此表会产生重大的性能问题吗?有没有人有非常大的SQL数据库的经验告诉我们这是否会有问题?如果是这样,我们应该选择哪种替代方案?
答案 0 :(得分:75)
每张桌子的行不会成为问题。
粗略地讲,每天100万行,90天是9亿行。我认为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
答案 1 :(得分:38)
使用>在桌面上显着加快查询速度的另一种方法1万个行在非工作时间集群中的索引表 最常用于您的查询。我们有一张表> 2.18亿行,已发现30倍的改进。
此外,对于非常大的表,最好在外键上创建索引。