PostgreSQL上没有分片的100 TB数据库


9

在PostgreSQL上设置100 TB数据库(实际上大约为90 TB)而在多个节点之间不进行数据分片是否现实?是否有关于类似设置的成功案例/示例?


4
我想这取决于您的工作量。数据如何分布?如何查询?您需要哪种响应时间?
Frank Farmer

好吧,负载曲线可以描述为频繁插入(峰值时每秒约50K),很少选择(按用户和时间戳的行范围)。数据可以容易地由用户和日期/时间戳进行分片/分区

Answers:


9

每秒需要吸收50K次写入通常是一项挑战。即使在具有简单插入内容的合成基准测试中,PostgreSQL的限制也往往会达到大约10 K / s的最大值-就数据库大小而言,您甚至没有那么大的野兽。

同样,即使是RAID 10,并假设50K插入将仅等于50K IOPS,该PostgreSQL节点的I / O系统也会很有趣(这可能是错误的,但这取决于您的数据库方案和索引),您将需要大约一百个磁盘以及一个非常好的阵列,从而避免您购买数百个磁盘来及时为这些写入提供服务。

如果分片很容易,并且您期望这么大的写入负载,那么请进行分片。写入可能很难扩展。


同意。这是ExaData类型系统的域。令人遗憾的是,如今使用SSD可以达到50k IOPS的确是微不足道的-否则这些将是昂贵的。我希望这里有更多的7位预算用于硬件,包括中端到高端SAN。
TomTom

是的,如果您想使用“垂直集成解决方案堆栈”,ExaData是一个选择,考虑到需求,这可能还不错。
pfo 2011年

是的 诸如此类的东西有一个巨大的优势,一个100tb和50.000 iops都不会真正尖叫“便宜”。Exadata会做什么-完全装载SSD时达到100万IOPS?
TomTom

2
为了补充这些意见,我认为,考虑到获得具有那样数量的插入量的数据量所需的预算,我很想使用付费的SQL引擎,它将只占总预算的一小部分,将会有更好的支持。
斩波器

我完全同意。当您的SAN预算达到数十万美元时,很多估值都会发生变化。
TomTom

1

这是现实的,并且会起作用。性能在很大程度上取决于您拥有多少RAM。RAM越大,缓存越大,并且PostgreSQL在卸载到磁盘之前可以缓存数据的时间越长。

PostgreSQL将数据写入缓存,并不时卸载缓存。因此,每秒50k INSERT不会转换为50k IOPS。这样会少一些,因为它将群集记录在一起并同时将它们全部写入。

如果大多数工作是INSERT,那么大的数据库不是问题。PostgreSQL必须在此更改索引,但这确实是一件容易的事。如果在这种大小的数据库上有很多SELECT,那么您确实需要分片。

我曾经在16GB服务器(仅一个实例)上处理400TB的Oracle DB(Oracle 10g)。数据库的工作量也是主要的INSERT,因此每天需要进行几次SELECT,每天需要数百万INSERT。性能绝不是问题。


1

在100TB时,您面临一些重要挑战。是否适合您取决于您​​要如何解决这些问题。

  1. 您需要足够的方法来吸收写负载。这取决于写入负载。但是有了足够出色的存储,就可以解决它。速度是一个大问题。同样,必须仔细考虑读取访问。

  2. 大多数数据库不是由一堆较小的表组成,而是经常有一个或两个非常大的表,最多可以达到数据库大小的一半。PostgreSQL对每个表的硬限制为32TB。之后,tid类型的页面计数器用完了。这可以通过PostgreSQL的自定义版本或表分区来解决,但这是一个严峻的挑战,首先需要解决。

  3. PostgreSQL对于可以用于各种任务的RAM数量有实际限制。因此,拥有更多的RAM可能会或可能不会在一定程度上帮助您。

  4. 备份....如此规模的备份很有趣。我所知道的60TB数据库必须使用fs快照备份,然后为Barman伪造备份以进行wal归档。这些假备份是fs快照备份的代理。正如我所说,“它们不是伪造的备份。它们是替代备份!”

有些人的数据库接近这个范​​围。我遇到了至少一个在荷兰的一家银行工作的人,该银行拥有60TB PostgreSQL数据库。但是实际上,确实取决于您的工作量,大小本身不是问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.