我是新手Play我理解,它可能是错的,play框架是非阻塞的,以异步方式处理请求,长阻塞操作应该使用promise异步完成.那么什么时候我应该使用promise或映射的promises来处理给定的请求,何时不使用?
例如,假设用户上传文件,当它到达控制器时,我将文件从临时文件夹移动到所需的文件夹并插入数据库记录.所以这涉及2个阻塞操作,文件移动和插入数据库.假设文件不大,比如最大10MB,那么文件移动应该是合理的快速.并且使用阻塞数据库驱动程序也应该快速插入db记录.
在这个简单的情况下,我是否应该使用一个promise/future来执行2个操作或2个映射的promises(移动文件然后插入db记录)或者根本不使用promise?为什么?
请分享您的想法/经验.先感谢您.
我有一个带有Dockerfile的数据容器:
from ubuntu:latest
VOLUME ["/var/lib/postgresql/9.3/main"]
Run Code Online (Sandbox Code Playgroud)
和postgresql服务容器:
#install stuff
............
# Set the default command to run when starting the container
CMD ["/usr/lib/postgresql/9.3/bin/postgres", "-D", "/var/lib/postgresql/9.3/main", "-c", "config_file=/etc/postgresql/9.3/main/postgresql.conf"]
Run Code Online (Sandbox Code Playgroud)
然后我启动数据容器和postgresql容器:
docker run -i -t -d --name data docker:data
docker run -i -t -p 49131:5432 --name postgresql --volumes-from data --rm docker:postgresql
Run Code Online (Sandbox Code Playgroud)
它说 :
FATAL: data directory "/var/lib/postgresql/9.3/main" has wrong ownership
HINT: The server must be started by the user that owns the data directory.
Run Code Online (Sandbox Code Playgroud)
看起来该/var/lib/postgresql/9.3/main文件夹属于data容器中的root用户.然后我附加到容器,添加用户并将该文件夹的所有者更改为postgres:
docker attach data
useradd postgres …Run Code Online (Sandbox Code Playgroud) 我的应用程序在某些时候运行util,JVM递归地反复执行次要的垃圾收集并且永远不会停止.我的java命令行:
java -Xmx4G -Xms4G -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/home/root/gc.log -jar myApp.jar
Run Code Online (Sandbox Code Playgroud)
gc输出:
4.238: [Full GC [PSYoungGen: 21968K->9997K(420864K)] [ParOldGen: 74537K->83814K(150144K)] 96505K->93811K(571008K) [PSPermGen: 10761K->10757K(21824K)], 0.3216090 secs] [Times: user=0.99 sys=0.01, real=0.32 secs]
8.660: [GC [PSYoungGen: 400333K->23552K(517568K)] 484147K->117422K(667712K), 0.0554510 secs] [Times: user=0.22 sys=0.00, real=0.06 secs]
8.979: [GC [PSYoungGen: 517504K->23488K(632384K)] 611374K->117358K(782528K), 0.0263860 secs] [Times: user=0.09 sys=0.01, real=0.03 secs]
9.333: [GC [PSYoungGen: 622208K->32K(637888K)] 716078K->117418K(788032K), 0.0249140 secs] [Times: user=0.09 sys=0.01, real=0.02 secs]
9.656: [GC [PSYoungGen: 603040K->32K(603072K)] 720426K->117418K(753216K), 0.0059430 secs] [Times: user=0.02 sys=0.00, real=0.00 secs]
9.960: [GC [PSYoungGen: 603040K->32K(638464K)] 720426K->117418K(788608K), …Run Code Online (Sandbox Code Playgroud)