并发数据库连接 - 如何计算

时间:2013-03-23 11:39:42

标签: mysql concurrency database-connection connection-pooling xml-rpc

我们的mysql主机具有并发数据库连接的限制。由于扩展该限制相当昂贵,因此出现了以下问题:

的信息: 我有一个网络应用程序(由外部编码器开发 - 如果你可能想知道这个问题)。

Web应用程序分布并安装在许多服务器上(每个用户都将其安装在PC上)。这些卫星正在将数据发送到mysql数据库。现在卫星直接发布到数据库中。为了提高安全性和错误处理能力,我希望将卫星发布到XML-rpc(wordpress api),然后再将其发布到数据库中。

问题: 这样的api会减少并发连接的数量吗? (现在每个卫星直接连接。就像1个用户= 1个连接)

如果有10个卫星发布到一个文件,则此文件处理数据并将其发布到数据库中 - >这是一个连接吗? (或处理了与不同数据集一样多的连接。)

如果api节流一点,怎么办,因为一次只发布一次。这会导致只有一个连接吗?

任何指针都非常感谢! 提前谢谢!

2 个答案:

答案 0 :(得分:1)

如果要改善与数据库的并发连接(因为事实是,创建与数据库的连接是“昂贵的”)。您应该考虑使用ConnectionPoolexample与Java)。

如何计算并发数据库连接?

concurrency http://iforce.co.nz/i/nsullipd.twc.png

A connectionless服务器

  • 使用无连接的IPC API(例如,无连接数据报套接字)
  • 并发客户端的会话可以交错。

A connection-oriented服务器

  • 使用面向连接的IPC API(例如流模式套接字)
  • 并发客户端的会话只能是顺序的,除非服务器是线程化的。
  

Client-server distributed computing paradigm,N.A。)

设计和效果问题

  • 数据库连接可能成为瓶颈。这可以解决 使用连接池。

  • 可以使用PreparedStatements重新编译已编译的SQL语句 而不是陈述。这些陈述可以参数化。

  • 连接通常不是由servlet直接创建的 使用工厂(DataSource)创建或从命名服务获得 (JNDI)。

  • 释放连接很重要(关闭它们或将它们返回到 连接池)。这应该在finally子句中完成(以便完成 在任何情况下)。请注意,close()也会抛出异常!

        try
        {
            Console.WriteLine("Executing the try statement.");
            throw new NullReferenceException();
        }
    
        catch (NullReferenceException e)
        {
            Console.WriteLine("{0} Caught exception #1.", e);
        }
    
        catch
        {
            Console.WriteLine("Caught exception #2.");
        }
    
        finally
        {
            Console.WriteLine("Executing finally block.");
        }
    
  • 开发OO和OO之间的接口时存在各种问题 RDBMS。这被称为“范式不匹配”​​。主要问题是 数据库使用值引用,而OO语言使用引用 地址。所谓的中间件/对象持久性框架软件 试图缓解这种情况。

  

Dietrich,R。(2012)。 Web应用程序体系结构,服务器端脚本Servlet。北帕默斯顿:梅西大学。

答案 1 :(得分:1)

这取决于您实施集中服务的方式。

如果收到请求后的服务立即将数据发布到mysql,如果同时发出请求,您可能会有很多连接。但是使用连接池可以精确控制您将拥有多少个打开的连接。在限制中,您只能打开一个连接。如果有许多并发请求,这可能会导致争用,因为每个请求都必须等待释放连接。

如果服务收到请求,将它们存储在某个地方(数据库除外),并以块的形式处理它们,您也可以只有一个连接。但是这种情况实现起来比较复杂,因为你必须控制对临时数据缓冲区的访问(读写)。