#postgresql #future #sql-database #sql #high-availability

sys pg_async

基于libpq的异步、高可用(主-主)PostgreSQL驱动程序

27个版本

使用旧的Rust 2015

0.8.6 2018年12月16日
0.8.5 2017年6月22日
0.8.3 2017年5月1日
0.5.1 2017年3月30日
0.3.1 2016年12月31日

数据库接口中排名第2606

Download history 35/week @ 2024-03-31

每月下载量60

MIT协议

70KB
866

pg_async.rs

基于libpq的异步、高可用(主-主)PostgreSQL驱动程序。

crate docs patreon

愿景

  • 旨在与主-主复制数据库(如BDR)一起工作,但也支持独立数据库。
  • 使用libpq,利用其异步支持。
  • 维护对复制集群中每个节点的异步连接。
  • 通过SELECT 1查询节点,以查看哪个更接近/更快。
  • 每个操作都是一个单独的事务。
  • 如果节点失败,操作将在另一个节点上透明地重试。
  • 操作以futures的形式公开。
  • futures由一个或两个线程支持,并且可以在不使用tokio反应器的情况下使用(因为KISS)。
  • 快速模式:将操作发送到每个节点,并返回第一个答案。
  • Pin模式:只将操作发送到其中一个节点(有助于避免一些主-主冲突)。
  • 有一个JSON辅助程序,可以将表行转换为serde_json对象。
  • 如果操作尚未流水线化,则取消Future允许驱动程序取消它。
  • 可以使用数据库级别的超时来提前终止慢速操作。

注意

libpq和OpenSSL的组合在PostgreSQL服务器重启期间表现不佳。我见过当OpenSSL层启用时,libpq SEGV崩溃是可靠的。为了使驱动程序正确处理PostgreSQL服务器的不可用性和重启,我建议将"sslmode=disable"禁用器添加到连接字符串中。

依赖关系

~5MB
~100K SLoC