database - 如果 postgres 的性能低下,我应该选择哪个数据库

标签 database performance postgresql

在支持超过 5000 名用户的网络应用程序中,postgres 正在成为瓶颈。

添加一个新用户需要超过 1 分钟。(即使在优化后和在 Win 2k3 上)

那么,作为一个设计问题,其他哪些数据库可能更好?

最佳答案

很可能,这不是 PostgreSQL,而是您的设计。换鞋很可能不会让你成为更好的舞者。

你知道是什么导致了缓慢吗?是争用、更新索引的时间、搜索时间吗? 在您尝试插入第 5001 个用户的同时,所有 5000 个用户是否都在尝试写入用户表?我相信这会导致问题。您可能必须使用经过调整以处理极端并发性的东西,例如 Oracle。

MySQL(有人告诉我)可以优化为比 PostgreSQL 执行更快的读取,但就它们支持的#transactions/sec 而言,两者都快得离谱,这听起来不像是你的问题。


附言 我们在对不同答案的评论中进行了一些讨论——请注意,世界上一些最大的、存储方面的数据库是使用 Postgres 实现的(尽管它们倾向于调整引擎的内部结构)。 Postgres 可以非常好地扩展数据大小,并发性优于大多数,并且在您可以使用它方面非常灵活。

我希望有一个更好的答案给你,技术发明 30 年后,我们应该能够让用户对系统的了解不那么详细,以便让它顺利运行。但遗憾的是,我所知道的所有产品都需要广泛的思考和调整。我想知道 StackOverflow 的创建者是否可以分享他们如何处理数据库并发性和可伸缩性?他们正在使用 SQLServer,我知道的很多。


附言 因此,碰巧我昨天一头扎进了 Oracle 中的并发问题。我不完全确定我做对了,不是 DBA,但这些人的解释是这样的:我们有大量进程连接到数据库并检查系统字典,这显然会强制对其进行短锁定,尽管它只是一个读物。解析查询做同样的事情.. 所以我们(在一个拥有 1000 多个对象的多 tera 系统上)有很多强制等待时间,因为进程将彼此锁定在系统之外。我们的系统字典也太大了,因为它包含每个分区的所有信息的单独副本,每个表可能有数千个。这与 PostgreSQL 并没有真正的关系,但要点是——除了检查您的设计之外,请确保您的查询使用绑定(bind)变量并得到重用,并且共享资源的压力最小。

关于database - 如果 postgres 的性能低下,我应该选择哪个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/205324/

相关文章:

python - 为什么 Python3 在我的任务上比 Python2 慢很多?

postgresql - 使用什么文本编码?

SQL - 查找以相同字符开头的行

database - Sqlite 计算查询中 YYYYMMDD 日期格式之间的天数差异

sql - 如何调用包中的函数

php - 游戏库存数据库外键

java - 提高数据库访问性能

performance - Prim算法的快速实现

postgresql - 对象没有属性 'mogrify'

sql - Postgresql dense_rank 操作