Postgresql 用于长时间运行的事务的数据库,具有大量更新

Postgresql 用于长时间运行的事务的数据库,具有大量更新,postgresql,transactions,isolation-level,mvcc,Postgresql,Transactions,Isolation Level,Mvcc,我构建了一个用于数据提取和转换的工具。典型用例-以事务方式处理大量数据 数字是-大约10秒-5分钟的持续时间,200-10000行更新(持续时间长不是由数据库本身造成的,而是由事务期间使用的外部服务造成的) 有两种类型的代理访问数据库-多个读代理,只有一个写代理(所以,永远不会有多个并发写) 交易期间: 读取代理应该能够读取数据库并在当前状态下查看它 写代理应该能够读取数据库(它在事务期间执行读写操作),并在新(尚未提交)状态下查看它 对于这种类型的负载,PostgreSQL是一个不错的选择

我构建了一个用于数据提取和转换的工具。典型用例-以事务方式处理大量数据

数字是-大约10秒-5分钟的持续时间,200-10000行更新(持续时间长不是由数据库本身造成的,而是由事务期间使用的外部服务造成的)

有两种类型的代理访问数据库-多个读代理,只有一个写代理(所以,永远不会有多个并发写)

交易期间:

  • 读取代理应该能够读取数据库并在当前状态下查看它
  • 写代理应该能够读取数据库(它在事务期间执行读写操作),并在新(尚未提交)状态下查看它
对于这种类型的负载,PostgreSQL是一个不错的选择吗?我知道它使用MVCC,所以一般来说应该可以,但是广泛使用长事务和大事务可以吗

其他哪些开源事务性数据库可能是一个不错的选择(我不限于SQL)

附言

我不知道碎片是否会影响性能。数据库将被切分。对于每个碎片,将有多个读卡器和一个写入器,但可以同时写入多个不同的碎片

我知道在交易过程中最好不要使用外部服务,但在这种情况下,这就是目标。该数据库被用作一些繁重、庞大、缓慢且最终一致的数据处理工具的可靠且一致的索引。

巨大免责声明:一如既往,只有真实的测试才能告诉你真相

但是,如果您使用最新版本(至少9.1,更好的9.2)并对其进行适当调整,我认为PostgreSQL不会让您失望

我的服务器中的负载有些相似,但R/W比稍差:大约10:1。事务的范围从几毫秒到1小时(有时甚至更长),一个事务最多可以插入或更新10万行。具有长事务的并发写入程序的总数可以达到10个或更多。 到目前为止还不错-我没有任何严重的问题,性能很好(当然不会比我预期的差)

真正有帮助的是,我的热处理数据集几乎可以放入可用内存中


所以,试一试,它对你的负载应该很有用。

看看这个链接


基本上,您的交易量在软件方面可能存在一些技术限制。

您的预期行大小是多少?我的经验是,对于中等大小的行(比如100字节),将在@wildplasser中更新10K记录,延迟不是由数据库本身造成的,而是由事务期间使用的外部服务造成的。你是说你也有读卡器?你估计的读写比率是多少?阅读的“足迹”(就所需页面而言)是什么?它们是否会在行(可能是锁)或页面方面与写入重叠?注:我刚看到你的更新。我相信R与W的比率大约是100/1。是的,R和W可能重叠(但MVCC应该有帮助),而且只有顺序写入,所以应该没有锁。我的估计是,如果工作集适合核心,那么它肯定是可行的;也许你可以做个测试?顺便说一句:请等待其他人的反应;我不是并发专家。哇,一年多后我接受了答案?谢谢您能否从高层角度分享您在PostgreSQL方面的经验?