我正在为我的公司设计一个RoR项目,我们的开发团队已经遇到了一些关于设计的争论,特别是数据库。
我们有一个名为Message的模型需要持久化。这是一个非常非常小的模型,除了id之外只有三个db列,但是当我们投入生产时,可能会有很多这样的模型。我们每天看到多达一百万次的插入。模型将仅通过其上的两个外键进行搜索,这两个外键可以被索引。同样,这些模型永远不会被删除,但我们也不需要在它们大约三个月大的时候保留它们。
所以,我们想知道的是,在Postgres中实现这个表是否会带来严重的性能问题?有没有人有过使用大型SQL数据库的经验,可以告诉我们这是否会是一个问题?如果是这样的话,我们应该选择什么呢?
发布于 2014-02-19 06:02:47
每个表的行数本身并不是问题。
因此,粗略地说,每天100万行,持续90天,相当于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发布于 2016-02-22 04:21:10
另一种在行数大于1亿行的表上显着提高查询速度的方法是在非工作时间对查询中最常用的索引上的表进行集群。我们有一个超过2.18亿行的表,并发现性能提高了30倍。
此外,对于非常大的表,在外键上创建索引也是一个好主意。
编辑:来自评论:
示例:
在本例中,我引用的表名为
下面是你的一步一步:
因此,在第一步和第二步中,我们删除索引并重新创建它。
https://stackoverflow.com/questions/21866113
复制相似问题