0

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

信息:我有一个网络应用程序(由外部编码人员开发 - 以防您可能想知道这个问题)。

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

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

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

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

任何指针都非常感谢!先感谢您!

4

2 回答 2

1

如果您想改进与数据库的并发连接(因为事实上,创建与数据库的连接是“昂贵的”)。您应该考虑使用ConnectionPool( Java示例)。

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

并发
(来源:iforce.co.nz

connectionless台服务器

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

connection-oriented台服务器

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

客户端-服务器分布式计算范式,不适用)

设计和性能问题

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

  • 编译后的 SQL 语句可以通过使用 PreparedStatements 而不是语句来重复使用。这些语句可以参数化。

  • 连接通常不是由 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 和 RDBMS 之间的接口时存在各种问题。这被称为“范式不匹配”​​。主要问题是数据库使用按值引用,而 OO 语言使用按地址引用。所谓的中间件/对象持久性框架软件试图缓解这种情况。

迪特里希 (Dietrich, R.) (2012)。Web 应用程序架构,服务器端脚本 Servlet。北帕默斯顿:梅西大学。

于 2013-03-23T11:52:39.817 回答
1

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

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

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

于 2013-03-23T11:59:33.470 回答