2

我正在使用扭曲的高速公路服务器来提供 RPC API。一些调用需要查询数据库,并且多个客户端可能通过 websocket 连接到服务器。

我正在使用 SqlAlchemy ORM 来访问数据库。

以下两种处理 SqlAlchemy 会话的方法的优缺点是什么。

  1. 为每个 RPC 调用创建和销毁会话
  2. 在服务器启动时创建一个会话并在每个 RPC 调用中使用它

你会推荐哪个,为什么?(我倾向于2)

4

2 回答 2

3

使用 PostgreSQL、Oracle 或 SQLite 等数据库从 Twisted(和 Autobahn)进行基于 SQL 的数据库访问的推荐方法是twisted.enterprise.adbapi

twisted.enterprise.adbapi将在后台线程池上运行查询,这是必需的,因为大多数数据库驱动程序都是阻塞的。

旁注:对于 PostgreSQL,还有一个本地异步、非阻塞驱动程序:txpostgres

现在,如果您将 SQLAlchemy 之类的 ORM 放在本机 SQL 驱动程序之上,我不确定这将如何与twisted.enterprise.adbapi.

所以从你提到的选项

  1. 不行,因为大多数驱动程序都在阻塞(并且 Autobahn 的 RPC 在主线程上运行 = Twisted 反应器线程 - 你不能阻止它)。
  2. 有了这个,您需要将数据库会话放在后台线程中(同样,不要阻塞)。

也见这里

于 2014-01-26T16:25:24.970 回答
1

如果您同时使用 SQLAlchemy 和 Twisted,请考虑使用Alchimia而不是内置的adbapi.

于 2014-01-28T18:55:20.053 回答