【问题标题】:database connection pooling in rubyruby 中的数据库连接池
【发布时间】:2012-08-13 03:52:17
【问题描述】:

我刚开始使用 Ruby,正在玩 Sinatra,但找不到在请求之间共享数据库连接的方法。

我来自 Java Web 开发,您必须做的基本工作之一就是汇集数据库连接,所以我确信 Ruby 中存在类似的东西,但我就是找不到。

ActiveRecord 和 DataMapper 提供此功能,但我不需要 ORM,只想进行常规 SQL 查询。

是否有针对 Sinatra 的特定方法或针对所有基于 Rack 的应用程序的通用方法?

【问题讨论】:

    标签: ruby sinatra


    【解决方案1】:

    要保持连接,您只需要创建一个实例变量(无论如何,Sinatra 应用程序只是对象)或全局变量。或者为您管理连接的课程。我见过的大多数 Ruby 数据库都是数据库适配器或只是客户端。

    @db = Mysql2::Client.new #...
    

    或者一个全局变量:

    $db = Mysql2::Client.new #...
    

    连接池只是在应用程序的生命周期内跨多个线程/光纤共享少量连接的一种方式。 Java,JVM,据我所知不共享进程之间的连接。

    但是,有一个通用的Connection Pool library for Ruby

    【讨论】:

    • 谢谢,但是如果我创建一个实例变量,每次创建应用程序对象时,也会创建新的连接,对吧?那么这对共享连接有什么帮助呢?
    • 应用程序在请求之间不会关闭,除非您手动关闭它。应用程序已加载并将响应请求并在其生命周期内保持其连接。这是我所知道的 Ruby 连接池中最好的。
    • 在没有像SequelDataMapperActiveRecord这样的ORM的情况下直接使用Mysql2可能是个坏主意。在大多数情况下,这些会自动为您进行池化。如果你“只是做 SQL 查询”,你的应用程序很快就会变得一团糟。 Sequel 是无需真正去那里就可以接近 SQL 的最佳选择,因为查询生成器非常好。
    • @Robert K 再次感谢您,您能告诉我在 Rack 标准、Sinatra 框架中指定该行为的位置还是仅通过测试?我只是好奇。
    • @Nikoi,Ruby 的 Sequel 做得非常好,运行速度非常快。看看吧。
    猜你喜欢
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 2015-06-27
    • 1970-01-01
    • 2010-10-23
    • 2015-08-09
    • 1970-01-01
    相关资源
    最近更新 更多