(评论)
(comments)
原始链接: https://news.ycombinator.com/item?id=38616181
然而,您必须认识到,基于设计决策的可扩展性是有限的,并且选择将许多不同的流程放入单一的 RDBMS 结构中可能最终会在性能方面遇到障碍,特别是当您变得更大、更复杂时。 每个进程都会增加执行时间和 CPU 使用率方面的开销,更不用说不同独立组件之间协调所需的资源了。
对于完全在 RDBMS 中实现非常细粒度的调度/日志记录系统来说,这绝对不是理想的选择,但它肯定可以有效地完成。 它不一定是有史以来最优雅或最有效的解决方案,也不一定是最简洁的实施,但可以通过仔细的关注和工程设计使其有效运行,但代价是增加操作复杂性。 最终,每个系统设计都必须平衡相互竞争的优先事项,例如功能、效率、灵活性、可维护性、安全性等等。
选择在一个地方完成所有工作(例如单一数据库)会给您带来一些好处,包括更轻松的整体调试功能和简化的资源分配规划。 然而,它具有显着的缺点和所使用的底层硬件基础设施所施加的限制。 例如,可扩展性往往会在某个点受到限制,因为每添加一行都会增加响应时间的可能性。 此外,引入的每个附加组件或功能往往会增加操作复杂性,随着时间的推移,这会显着增加总成本。
此外,在现有的较大遗留代码库中实现高度交错的调度/日志记录系统可能会变得笨拙并引入严重的复杂性,特别是当负载需求随着时间的推移而增加时。 在实践中,引入单独的数据库系统来支持这种要求极高的工作负载操作是很常见的。 在这种情况下,分区、分布式系统和联合系统等技术可以实现功能的有效扩展。
但总的来说,它最终归结为在考虑到现有的限制和资源的情况下,为您需要完成的任何任务找到实用且务实的解决方案。 优化和优雅并不一定是在所有情况下追求的最理想的目标。
这类似于询问每天吃 5 顿饭与全天吃 20 顿小餐是否更好。 两者都可以工作,但对于某些功能,它们可能会以更精细的粒度表现得更好,所以是的,如何做到这一点绝对很重要。
每项技术在某个时刻
You can create a replication slot, take a snapshot, restore the snapshot to a new instance, advance the LSN and replicate from there - boom, you have a logical replica with all the data. Then you upgrade your logical replica.
This article from Instacart shows how to do it: https://archive.ph/K5ZuJ
If I remember correctly the article has some small errors but I haven't done this in a while and I don't exactly remember what was wrong. But in general the process works, I have done it like this several times upgrading TB-sized instances.
reply