我正在使用扭曲的高速公路服务器来提供 RPC API。一些调用需要查询数据库,并且多个客户端可能通过 websocket 连接到服务器。
我正在使用 SqlAlchemy ORM 来访问数据库。
以下两种处理 SqlAlchemy 会话的方法的优缺点是什么。
- 为每个 RPC 调用创建和销毁会话
- 在服务器启动时创建一个会话并在每个 RPC 调用中使用它
你会推荐哪个,为什么?(我倾向于2)
我正在使用扭曲的高速公路服务器来提供 RPC API。一些调用需要查询数据库,并且多个客户端可能通过 websocket 连接到服务器。
我正在使用 SqlAlchemy ORM 来访问数据库。
以下两种处理 SqlAlchemy 会话的方法的优缺点是什么。
你会推荐哪个,为什么?(我倾向于2)
使用 PostgreSQL、Oracle 或 SQLite 等数据库从 Twisted(和 Autobahn)进行基于 SQL 的数据库访问的推荐方法是twisted.enterprise.adbapi。
twisted.enterprise.adbapi
将在后台线程池上运行查询,这是必需的,因为大多数数据库驱动程序都是阻塞的。
旁注:对于 PostgreSQL,还有一个本地异步、非阻塞驱动程序:txpostgres。
现在,如果您将 SQLAlchemy 之类的 ORM 放在本机 SQL 驱动程序之上,我不确定这将如何与twisted.enterprise.adbapi
.
所以从你提到的选项
也见这里。
如果您同时使用 SQLAlchemy 和 Twisted,请考虑使用Alchimia而不是内置的adbapi
.