我们正考虑从我们目前正在使用的其他数据库后端迁移到Postgres。从我真正看到的,它非常可靠,稳定和高效。我意识到我非常喜欢Postgres - 与其他时尚产品相比,它表现得非常好。但是,用例可能很奇怪,所以我有点担心我的决定。
我们想要的是数亿行的简单键值存储。每行的大小差异很大 - 从10kb到兆字节(但不超过10兆字节)。键是字符串,值是二进制数据。
我们只需要PK和Key索引,没有值的索引。
但是,由于我们使用SSD,我希望尽可能降低磁盘使用率。那么Postgres的硬盘开销是多少?是否有任何公式来估计它?
什么是最好的存储引擎(保持最低的硬盘使用率)?我们需要非常快速的写入,但读取速度相对较慢。
答案 0 :(得分:3)
PostgreSQL每行的开销为24-28字节。
这很大,因为行包含所有MVCC事务可见性信息 - 没有像其他MVCC数据库实现那样的“重做”和“撤消”日志。这在某些工作负载中具有一些真正的优势,在其他工作负载中有一些真正的缺你的可能是其中一个缺点。
不仅如此,我还没有看到你真正受益于PostgreSQL的功能。它确实提供非常强大的写安全保证。它具有可靠的事务隔离(在各种级别)。有许多好东西,但如果你只是把它当作一个愚蠢的k / v商店,它们中的许多都没那么有用。
我建议如果你需要的只是一个愚蠢的K / V商店,use a dumb k/v store。有很多选项可以满足不同的需求,具有不同级别的隔离/事务支持,写入可靠性等,以及相应的不同开销和一致性保证。
PostgreSQL 可以很棒的一次是你希望将K / V操作与其他更多的关系工作负载混合在一起。在这种情况下,对hstore
和json
等内容的支持可能非常棒。但它们并不适合您的用例。
答案 1 :(得分:2)
您希望文档中的this page详细说明行格式。每行开销至少有24个字节。生命因较长数据的TOAST-TOAST压缩而变得复杂。我建议建立一个示例数据库并使用系统函数来测量大小。
但是,请测试MB大小的行 - 传输速度可能是您的问题。