我们正在考虑从当前使用的其他数据库后端迁移到Postgres。据我所见,它非常可靠,稳定,高效。我意识到我真的很喜欢Postgres——它的表现非常好,相比其他一些时尚的东西。然而,这个用例可能很奇怪,所以我有点担心我的决定。
我们需要的是一个简单的键值存储,可以存储数亿行。每一行的大小都非常不同——从10 kb到MB(但不超过10 MB)。键是字符串,值是二进制数据。
我们只需要PK和Key索引,不需要值的索引。
但是,由于我们使用ssd,所以我希望尽可能地降低磁盘使用率。那么Postgres的硬盘驱动器开销是多少?有什么公式可以估计吗?
什么是最好的存储引擎(保持最低的硬盘使用率)?我们需要写得很快,但读得相对慢是可以的。
最佳答案
PostgreSQL每行的开销为24-28字节。
它之所以这么大是因为行包含了所有MVCC事务可见性信息—没有像其他MVCC数据库实现那样的“重做”和“撤消”日志。这在某些工作负载中有一些真正的优势,而在其他工作负载中有一些真正的劣势。你的可能是缺点之一。
不仅如此,我不认为你会从PostgreSQL的特性中真正受益。它确实提供了非常可靠的写安全保证。它具有可靠的事务隔离(在各种级别)。有很多好的东西,但是如果你只是把它当作一个愚蠢的k/v商店的话,很多东西就没那么有用了。
我建议,如果你只需要一个愚蠢的K/V商店,use a dumb k/v store。有很多选项可以满足不同的需求,包括不同级别的隔离/事务支持、写可靠性等,以及相应的不同的开销和一致性保证。
PostgreSQL最棒的一次是,您希望将类似于K/V的操作与其他更相关的工作负载混合起来。在这种情况下,对hstore
和json
之类的东西的支持是非常棒的。不过,它们对于您的用例来说并不是很理想。
关于postgresql - 硬盘开销和最有效的存储,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23762110/