JAX-RS RESTful 服务和永久 Oracle 连接
JAX-RS RESTful Service and permanent Oracle connection
我正在编写一个 RESTful 服务,它使用 application/octet-stream
并接受二进制文件将它们写入磁盘(Tomcat 8,Windows Server 2012R2,JAX-RS ).然后我需要将文件内容插入 Oracle table.
服务本身运行良好,接受文件并将它们写入磁盘。
我的问题(或称之为最佳实践问题)是如何将数据传输到 Oracle 数据库。当然,我可以在服务本身中打开一个连接,每次服务接受文件时都会调用该连接,但这真的是 "correct" 方式吗?我们谈论的是许多小文件(假设每分钟 100 个,每个大约 300 字节)。
我应该创建一个连接池吗?或者甚至是一个使 Oracle 连接永久打开的独立程序?不幸的是,我目前无法真正进行基准测试,因为我在一个孤立的测试服务器上。
那么,tl;dr:如何将 RESTful 服务接受的许多小文件的内容传输到 Oracle 数据库?
连接池是最通用的方式。原因有很多——将连接管理的关注点与连接使用分开,通过配置进行可伸缩性控制,克服与连接设置相关的延迟,...
那里有很多简单连接池的实现,它们可以在应用程序服务器或库中找到 - c3p0 对于独立的、自包含的 web 应用程序来说是一个很好而且简单的实现。
当您在 Tomcat 上部署时,使用 Tomcat managed connection pool 是最通用的方法。我们使用它并从中获得非常好的性能。你可以推出自己的并对其进行基准测试,但我不确定这样做的优点。我知道我会首先尝试与 Tomcat 最佳集成的方式,并且只有当它不执行移动到像 C3P0 这样的库时才会这样做。
根据您的用例,您可以不将文件写入磁盘而只是将它们插入数据库。由于您的文件很小,因此甚至没有理由去异步或分叉线程进行插入。
我正在编写一个 RESTful 服务,它使用 application/octet-stream
并接受二进制文件将它们写入磁盘(Tomcat 8,Windows Server 2012R2,JAX-RS ).然后我需要将文件内容插入 Oracle table.
服务本身运行良好,接受文件并将它们写入磁盘。 我的问题(或称之为最佳实践问题)是如何将数据传输到 Oracle 数据库。当然,我可以在服务本身中打开一个连接,每次服务接受文件时都会调用该连接,但这真的是 "correct" 方式吗?我们谈论的是许多小文件(假设每分钟 100 个,每个大约 300 字节)。
我应该创建一个连接池吗?或者甚至是一个使 Oracle 连接永久打开的独立程序?不幸的是,我目前无法真正进行基准测试,因为我在一个孤立的测试服务器上。
那么,tl;dr:如何将 RESTful 服务接受的许多小文件的内容传输到 Oracle 数据库?
连接池是最通用的方式。原因有很多——将连接管理的关注点与连接使用分开,通过配置进行可伸缩性控制,克服与连接设置相关的延迟,...
那里有很多简单连接池的实现,它们可以在应用程序服务器或库中找到 - c3p0 对于独立的、自包含的 web 应用程序来说是一个很好而且简单的实现。
当您在 Tomcat 上部署时,使用 Tomcat managed connection pool 是最通用的方法。我们使用它并从中获得非常好的性能。你可以推出自己的并对其进行基准测试,但我不确定这样做的优点。我知道我会首先尝试与 Tomcat 最佳集成的方式,并且只有当它不执行移动到像 C3P0 这样的库时才会这样做。
根据您的用例,您可以不将文件写入磁盘而只是将它们插入数据库。由于您的文件很小,因此甚至没有理由去异步或分叉线程进行插入。