【发布时间】:2018-01-09 17:51:16
【问题描述】:
我使用 ArangoDB/Go(使用 go-driver)并且需要实现多租户,这意味着每个客户都将在单独的数据库中拥有他的数据。
我想弄清楚的是如何使这种多租户工作。我知道为每个请求创建一个新的数据库连接是不可持续的,这意味着我必须维护一个连接池(不是典型的连接池)。当然,我不能只是假设我可以无限,必须有一个限制。然而,我想得越多,我就越明白我需要一些建议。我是 Go 新手,来自 PHP 世界,显然它是 PHP 中完全不同的范式。
一些细节 我有一个使用 arangodb/go-driver 与 ArangoDb 对话的 API(用 Go 编写)。创建数据库连接的标准方法是
创建连接 conn, err := graphHTTP.NewConnection(...)
创建客户端 c, err := graphDriver.NewClient(...)
创建数据库连接 graphDB,错误:= p.cl.Database(...)
如果只有一个 DB,并且在 API 启动时创建 DB 连接,则此方法有效。 就我而言,它有很多,而且如前所述,我需要维护一个数据库连接池。
让我感到困惑的是如何维护这个游泳池,请记住,游泳池必须有一个限制。 比如说,我的池大小为 5,随着时间的推移,它已被连接填满。一个新请求进来,它需要连接到不在池中的数据库。 在我看来,我只有两个选择:
- 如果未使用其中一个池连接,则终止它
- 等到 #1 可以完成,如果等待时间太长,则抛出错误。
最大的未知,这主要是因为我从来没有做过这样的事情,对我来说是如何跟踪连接是否正在使用。 更复杂的是,数据库连接有自己的池,它是在传输级别完成的。
关于如何完成这项任务的任何建议?
【问题讨论】:
-
如果您的问题是关于 ArangoDB 中多租户的可扩展性,那与 Go 或 PHP 无关。
-
@Adrian,我要求验证我对多租户数据库连接管理的想法。此外,很高兴看到一些关于如何做到这一点的建议,或者如何不......
-
这仍然与 Go 或 PHP 无关。正如所写,这个问题是如此模糊以至于无法回答。是的,你会想要使用某种连接池;不,你不能打开无限连接。很难给出任何建议或说出您是否“在思考正确的方向”,因为除了某种有限连接池之外,没有提供关于您实际尝试完成的任务或您正在考虑的方向的真正细节。
-
好吧,我听到了@Adrian,让我试着完善我的解释,一旦对你有意义,我会更新我的原始问题。
-
@Adrian,现在更有意义了吗?