Python数据库扭曲

Wil*_*ill 16 python database rdbms scalability twisted

Twisted应用程序有一个API可以以可扩展的方式与数据库通信:twisted.enterprise.dbapi

令人困惑的是,要选择哪个数据库?

该数据库将有一个Twisted应用程序,主要是进行插入和更新以及相对较少的选择,然后其他严格只读客户端正在访问数据库直接进行选择.

(只读用户不一定选择Twisted应用程序正在插入的数据;它不像数据库被用作消息队列一样)

我的理解 - 我想纠正/建议 - 是:

  • Postgres是一个很棒的数据库,但是几乎所有的Python绑定 - 以及它们中令人困惑的迷宫 - 都是弃用的
  • postgres 有psycopg2,但这对于做自己的连接池和事情会产生很多噪音; 这是否与Twisted异步数据库连接池优雅/有用/透明地共存?
  • SQLLite对于小东西来说是一个很棒的数据库,但是如果以多用户方式使用它会进行全数据库锁定,那么性能会影响我设想的使用模式; 它还有不同的键值列表机制?
  • MySQL - 在Oracle收购之后,谁想要现在采用它或采用分支?
  • 还有什么吗?

Jea*_*one 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",那么可能会有一个更简单,更高性能的选项.

  • 这是一个足够大的主题,它应该有15或20个专门的问题,而不是评论中的几句话.;) (3认同)

Eri*_*lun 10

txpostgres一个代替twisted.enterprise.dbapi线程池和阻塞DB IO的库,它是完全异步的,利用内置的异步功能psycopg2.

我们在大公司的生产中使用它,到目前为止它一直很好地为我们服务.此外,它已经积极开发 - 我们最近报告的一个错误很快就得到了解决.