服务器 Swift 与 mongodb 管理器单例
Server Swift with mongodb manager singleton
我正在使用 Vapor
和 Mongodb
进行一个项目。
假设在特定路线
drop.get("user", String.self) { request, user in
// ... query Mongodb
}
我想查询数据库,看看输入的用户是否已经存在。
拥有一个单例 MongoManager
class 来处理与数据库的所有连接是否明智?
drop.get("user", String.self) { request, user in
MongoManager.sharedInstance.findUser(user)
}
此实施是否会造成瓶颈?
不,除非在 Vapor Handler 和 MongoDB 之间有一个单线程机制,否则不会造成瓶颈。
MongoKitten(Swift + MongoDB 项目的底层驱动程序)在内部管理连接池。您可以在 MongoKitten 上盲目地发起查询,它会找出要使用的连接或在必要时创建一个新连接。
MongoKitten 3 的用户将对每个请求使用一个连接。如果同时处理多个请求,将打开额外的连接。
MongoKitten 4 的用户将对 3 个请求使用单个连接,这是可配置的。如果正在完成的请求太多,连接池将通过打开更多连接来扩展。
即将推出的 Meow ORM(其工作方式与您正在构建的类似)的用户将在每个线程中使用一个连接。如果保留所有连接,连接池将扩大。
我正在使用 Vapor
和 Mongodb
进行一个项目。
假设在特定路线
drop.get("user", String.self) { request, user in
// ... query Mongodb
}
我想查询数据库,看看输入的用户是否已经存在。
拥有一个单例 MongoManager
class 来处理与数据库的所有连接是否明智?
drop.get("user", String.self) { request, user in
MongoManager.sharedInstance.findUser(user)
}
此实施是否会造成瓶颈?
不,除非在 Vapor Handler 和 MongoDB 之间有一个单线程机制,否则不会造成瓶颈。
MongoKitten(Swift + MongoDB 项目的底层驱动程序)在内部管理连接池。您可以在 MongoKitten 上盲目地发起查询,它会找出要使用的连接或在必要时创建一个新连接。
MongoKitten 3 的用户将对每个请求使用一个连接。如果同时处理多个请求,将打开额外的连接。
MongoKitten 4 的用户将对 3 个请求使用单个连接,这是可配置的。如果正在完成的请求太多,连接池将通过打开更多连接来扩展。
即将推出的 Meow ORM(其工作方式与您正在构建的类似)的用户将在每个线程中使用一个连接。如果保留所有连接,连接池将扩大。