【问题标题】:Database for Python TwistedPython Twisted 数据库
【发布时间】:2011-02-12 06:54:35
【问题描述】:

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

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

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

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

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

  • Postgres 是一个很棒的数据库,但几乎所有的 Python 绑定(其中有一个令人困惑的迷宫)都是废弃软件
  • psycopg2 用于 postgres,但这在做自己的连接池和其他事情时会产生很多噪音;这是否与 Twisted 异步数据库连接池等优雅/有用/透明地共存?
  • SQLLite 对于小事来说是一个很棒的数据库,但是如果以多用户方式使用它会锁定整个数据库,所以性能会在我设想的使用模式中下降;它还具有用于键入列值的不同机制?
  • MySQL - 在被 Oracle 收购后,谁愿意现在采用它或采用分叉?
  • 还有其他东西吗?

【问题讨论】:

  • Oracle 数据库怎么样?

标签: python database scalability rdbms twisted


【解决方案1】:

可扩展性

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 个专门的问题,而不是评论中的几句话。 ;)
  • “如果您的所有查询看起来都像“SELECT foo, bar FROM baz”,那么可能会有一个更简单、性能更高的选项”--> 在写这篇文章时您有什么想法? :)
  • 一些非关系的东西,也许。保持元组的无序列表在很多系统中都可以做到,但不一定能显示出 RDBM 的优势。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    您可以查看 nosql 数据库,例如 mongodb 或 couchdb。 使用基于 nosql 的数据库进行横向扩展可能比使用 mysql 或 postgres 更容易。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-02
      • 1970-01-01
      • 1970-01-01
      • 2011-06-30
      • 2012-02-22
      • 1970-01-01
      • 1970-01-01
      • 2010-11-16
      相关资源
      最近更新 更多