Answers:
每秒需要吸收50K次写入通常是一项挑战。即使在具有简单插入内容的合成基准测试中,PostgreSQL的限制也往往会达到大约10 K / s的最大值-就数据库大小而言,您甚至没有那么大的野兽。
同样,即使是RAID 10,并假设50K插入将仅等于50K IOPS,该PostgreSQL节点的I / O系统也会很有趣(这可能是错误的,但这取决于您的数据库方案和索引),您将需要大约一百个磁盘以及一个非常好的阵列,从而避免您购买数百个磁盘来及时为这些写入提供服务。
如果分片很容易,并且您期望这么大的写入负载,那么请进行分片。写入可能很难扩展。
这是现实的,并且会起作用。性能在很大程度上取决于您拥有多少RAM。RAM越大,缓存越大,并且PostgreSQL在卸载到磁盘之前可以缓存数据的时间越长。
PostgreSQL将数据写入缓存,并不时卸载缓存。因此,每秒50k INSERT不会转换为50k IOPS。这样会少一些,因为它将群集记录在一起并同时将它们全部写入。
如果大多数工作是INSERT,那么大的数据库不是问题。PostgreSQL必须在此更改索引,但这确实是一件容易的事。如果在这种大小的数据库上有很多SELECT,那么您确实需要分片。
我曾经在16GB服务器(仅一个实例)上处理400TB的Oracle DB(Oracle 10g)。数据库的工作量也是主要的INSERT,因此每天需要进行几次SELECT,每天需要数百万INSERT。性能绝不是问题。
在100TB时,您面临一些重要挑战。是否适合您取决于您要如何解决这些问题。
您需要足够的方法来吸收写负载。这取决于写入负载。但是有了足够出色的存储,就可以解决它。速度是一个大问题。同样,必须仔细考虑读取访问。
大多数数据库不是由一堆较小的表组成,而是经常有一个或两个非常大的表,最多可以达到数据库大小的一半。PostgreSQL对每个表的硬限制为32TB。之后,tid类型的页面计数器用完了。这可以通过PostgreSQL的自定义版本或表分区来解决,但这是一个严峻的挑战,首先需要解决。
PostgreSQL对于可以用于各种任务的RAM数量有实际限制。因此,拥有更多的RAM可能会或可能不会在一定程度上帮助您。
备份....如此规模的备份很有趣。我所知道的60TB数据库必须使用fs快照备份,然后为Barman伪造备份以进行wal归档。这些假备份是fs快照备份的代理。正如我所说,“它们不是伪造的备份。它们是替代备份!”
有些人的数据库接近这个范围。我遇到了至少一个在荷兰的一家银行工作的人,该银行拥有60TB PostgreSQL数据库。但是实际上,确实取决于您的工作量,大小本身不是问题。