Python Twisted 的数据库

16 投票
3 回答
6660 浏览
提问于 2025-04-15 22:01

有一个API可以让Twisted应用程序以可扩展的方式与数据库进行交流:twisted.enterprise.dbapi

让人困惑的是,应该选择哪个数据库呢?

这个数据库将会有一个Twisted应用,主要是进行数据插入和更新,查询的次数相对较少。同时,还有一些只读的客户端直接访问数据库进行查询。

(这些只读用户不一定是在查询Twisted应用插入的数据;并不是说数据库被当作消息队列来使用)

我理解的情况是——希望能得到纠正或建议——如下:

  • Postgres是个很不错的数据库,但几乎所有的Python绑定——而且有很多让人困惑的选择——都已经不再维护了。
  • 对于Postgres,有psycopg2这个库,但它在连接池等方面有很多自己的做法;这和Twisted的异步数据库连接池能否很好地共存呢?
  • SQLLite是个适合小项目的好数据库,但如果用在多用户环境下,它会锁住整个数据库,这样在我设想的使用模式下性能会很差;而且它对列值的类型处理机制也不同?
  • MySQL在被Oracle收购后,谁还会想用它或者用它的分支呢?
  • 还有其他选择吗?

3 个回答

0

你可以考虑使用像mongodb或couchdb这样的nosql数据库,配合twisted框架。使用nosql数据库进行扩展会比用mysql或postgres简单得多。

10

有一个叫做 txpostgres 的库,它可以直接替代 twisted.enterprise.dbapi。与使用线程池和阻塞数据库输入输出不同,txpostgres 是完全异步的,充分利用了 psycopg2 内置的异步功能。

我们在一家大公司中使用这个库,效果非常好。此外,它还在不断更新和开发——我们最近报告的一个bug很快就被解决了。

15

可扩展性

twisted.enterprise.adbapi 并不一定是一个可以让你以可扩展的方式与数据库沟通的接口。可扩展性是一个需要单独解决的问题。twisted.enterprise.adbapi 主要的功能是让你可以使用 DB-API 2.0 模块,而不会像通常那样造成阻塞。

Postgres

没错。这是正确的答案。我认为并不是所有的 Python 绑定都是被遗弃的,比如 psycopg2 似乎还在积极维护。实际上,他们刚刚添加了一些新的绑定,用于异步访问,Twisted 可能最终会提供一个接口。

SQLite3 也很不错。你可能想让你的应用能够使用 Postgres 或 SQLite3;例如,即使你想在 Postgres 上部署,单元测试在 SQLite3 上运行会更顺利。

其他数据库?

很难确定其他类型的数据库(比如非关系型的)是否比 Postgres 更适合你的应用。这很大程度上取决于你要存储的具体数据和你需要执行的查询。如果你的数据库中有有趣的关系,Postgres 似乎是一个不错的选择。不过,如果你的查询都像“SELECT foo, bar FROM baz”这样简单,可能会有更简单、更高效的选择。

撰写回答