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