展开讨论

创业与收入经验摘录 · 机器翻译

只有一次我在PostgreSQL中遇到記憶體問題,那是因為我在數組和json中使用了太多數據

… 只有一次我在PostgreSQL中遇到記憶體問題,那是因為我在數組和json中使用了太多數據。這些只是佔用記憶體的變數。例如,我會將一個巨大的json返回給客戶端,結果PostgreSQL的記憶體不夠用了。我開始逐行流式傳輸資料,問題就解決了。

源讨论在PostgreSQL中自我射杀的九种方式原帖 268 条评论 · 导入时统计
3

这条内容在回应什么?

父级讨论 · 节选

AK

“2. 把所有的应用逻辑都放到Postgres函数和存储过程中” 为什么函数和存储过程(数据库层的抽象层)会被认为会影响性能,而同样的抽象层在应用层也是必须的(会引入进程外的开销和可能的网络流量)?我不认同这个建议。(或者我没能理解它。)

完整原文

社区评论 0

还没有社区评论,来聊聊你的看法。

原讨论中的回复 3

仅展示本次导入中包含的直接回复。中文为机器翻译,可查看英文原文。

SE

可能是因为不像应用程序代码那样容易进行适当的测试。而且调试要困难得多。

完整原文
PH

顺便说一下,促使文章中该部分的具体情况是一组递归函数,我们用来将不规则的图结构(不适合CTE)反规范化为一个JSON块,发送到另一个数据存储。99%的时间里没有问题,但在负载较重和复杂子图的情况下,这些递归调用栈导致了复制延迟。将遍历逻辑移到应用程序中,只向Postgres发送SQL查询(我们不使用ORM)消除了延迟。应用程序和数据库之间的往返时间只有几毫秒,而且这也不是面向用户的逻辑,因此在这种情况下额外的延迟不是问题。可能这里的根本问题是模式设计不佳,但有时候你只能使用现有的东西。另外,Reddit上的一个评论者指出,如果我们使用纯SQL技巧的话…

完整原文
ZE

我完全反对使用触发器来实现业务逻辑,但发现存储过程可以很好地封装一些应用程序/业务逻辑。我有几个应用程序访问同一个数据库,将逻辑放在数据库中可以避免在客户端重复它。大多数关于可调试性的评论都是无稽之谈。这只是不同而已,有一些优缺点。一个简单的例子——如果你在生产环境中发现了一个错误,你不会去附加调试器到生产应用程序上。但你可以绝对地打开一个只读连接到数据库,开始运行查询,调用函数等等。如果你能设计你的函数来区分纯只读函数和有副作用的函数,这会有所帮助,但即使没有这样做,你仍然可以进行调试。

完整原文
在 Hacker News 阅读

尊重不同观点,分享具体经验。

登录后即可发帖、评论、转发和引用。