Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb Java驱动程序无法偶尔读取数据,套接字超时_Java_Mongodb_Playframework 2.0_Socket Timeout Exception - Fatal编程技术网

Mongodb Java驱动程序无法偶尔读取数据,套接字超时

Mongodb Java驱动程序无法偶尔读取数据,套接字超时,java,mongodb,playframework-2.0,socket-timeout-exception,Java,Mongodb,Playframework 2.0,Socket Timeout Exception,我正在尝试使用Mongodb java驱动程序,我对这个偶尔出现的错误感到非常失望,尽管最常见的错误是在我第一次尝试连接数据库时出现的。任何关于去哪里找的帮助都会非常有用 设置基本上是这样的:我在本地主机上启动Play 2.0应用程序,尝试在我的应用程序上注册用户。当我键入用户名时,会向数据库发送一个查询以检查用户名是否存在,这需要一秒钟的时间(可能是实例化Mongo singleton和连接到数据库的开销),但似乎可以工作,我可以像这样成功执行多个查询: public static boole

我正在尝试使用Mongodb java驱动程序,我对这个偶尔出现的错误感到非常失望,尽管最常见的错误是在我第一次尝试连接数据库时出现的。任何关于去哪里找的帮助都会非常有用

设置基本上是这样的:我在本地主机上启动Play 2.0应用程序,尝试在我的应用程序上注册用户。当我键入用户名时,会向数据库发送一个查询以检查用户名是否存在,这需要一秒钟的时间(可能是实例化Mongo singleton和连接到数据库的开销),但似乎可以工作,我可以像这样成功执行多个查询:

public static boolean usernameIsAvailable(String username){
    DBCollection users = DBManager.getDB("mojulo").getCollection("users");
    DBCursor cursor = users.find(new BasicDBObject("username", username));
    if(cursor.count() == 0)
        return true;
    return false;
}
然后,当我尝试插入用户(总共约2kb的数据)时,问题出现了:

这会偶尔失败,但在
if(result.getLastError().ok())
行中往往会失败。我无法真正了解这个问题,因为它会随机弹出。以下是堆栈跟踪的一般外观:

play.core.ActionInvoker$$anonfun$receive$1$$anon$1: Execution exception [[Network: can't call something : ds033307.mongolab.com/107.20.129.238:33307/heroku_app4620908]]
at play.core.ActionInvoker$$anonfun$receive$1.apply(Invoker.scala:82) [play_2.9.1.jar:2.0]
at play.core.ActionInvoker$$anonfun$receive$1.apply(Invoker.scala:63) [play_2.9.1.jar:2.0]
at akka.actor.Actor$class.apply(Actor.scala:290) [akka-actor.jar:2.0]
at play.core.ActionInvoker.apply(Invoker.scala:61) [play_2.9.1.jar:2.0]
at akka.actor.ActorCell.invoke(ActorCell.scala:617) [akka-actor.jar:2.0]
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:179) [akka-actor.jar:2.0]

Caused by: com.mongodb.MongoException$Network: can't call something : ds033307.mongolab.com/107.20.129.238:33307/heroku_app4620908
at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:227) ~[mongo-java-driver-2.7.3.jar:na]
at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:305) ~[mongo-java-driver-2.7.3.jar:na]
at com.mongodb.DB.command(DB.java:160) ~[mongo-java-driver-2.7.3.jar:na]
at com.mongodb.DB.command(DB.java:183) ~[mongo-java-driver-2.7.3.jar:na]
at com.mongodb.DBCollection.getCount(DBCollection.java:864) ~[mongo-java-driver-2.7.3.jar:na]
at com.mongodb.DBCollection.getCount(DBCollection.java:835) ~[mongo-java-driver-2.7.3.jar:na]

Caused by: java.net.SocketException: Operation timed out
at java.net.SocketInputStream.socketRead0(Native Method) ~[na:1.6.0_31]
at java.net.SocketInputStream.read(SocketInputStream.java:129) ~[na:1.6.0_31]
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) ~[na:1.6.0_31]
at java.io.BufferedInputStream.read1(BufferedInputStream.java:258) ~[na:1.6.0_31]
at java.io.BufferedInputStream.read(BufferedInputStream.java:317) ~[na:1.6.0_31]
at org.bson.io.Bits.readFully(Bits.java:35) ~[mongo-java-driver-2.7.3.jar:na]
任何帮助都将不胜感激,因为我真的不知道这里发生了什么,更有经验的人可能知道去哪里找

有一点可能也说明了这一点,那就是问题发生的频率越高,我尝试加载到保存对象中的数据越多


谢谢

而不是users.find(新的BasicDBObject(“email”,email));您可以尝试使用users.find(新的BasicDBObject(“email”,email)).isExist();
isExist
方法似乎不存在。在findOne上(查询)不在find上。返回光标不会有什么区别。。。另外,我认为我这样做(返回光标并检查计数)意味着所有用户的数据最终都不会通过电线传输。除非我弄错了。但是,当我们遇到这样的情况时,例如任何具有相同emailid的用户,findOne(query).isExist()将在一行中完成您的工作。
play.core.ActionInvoker$$anonfun$receive$1$$anon$1: Execution exception [[Network: can't call something : ds033307.mongolab.com/107.20.129.238:33307/heroku_app4620908]]
at play.core.ActionInvoker$$anonfun$receive$1.apply(Invoker.scala:82) [play_2.9.1.jar:2.0]
at play.core.ActionInvoker$$anonfun$receive$1.apply(Invoker.scala:63) [play_2.9.1.jar:2.0]
at akka.actor.Actor$class.apply(Actor.scala:290) [akka-actor.jar:2.0]
at play.core.ActionInvoker.apply(Invoker.scala:61) [play_2.9.1.jar:2.0]
at akka.actor.ActorCell.invoke(ActorCell.scala:617) [akka-actor.jar:2.0]
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:179) [akka-actor.jar:2.0]

Caused by: com.mongodb.MongoException$Network: can't call something : ds033307.mongolab.com/107.20.129.238:33307/heroku_app4620908
at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:227) ~[mongo-java-driver-2.7.3.jar:na]
at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:305) ~[mongo-java-driver-2.7.3.jar:na]
at com.mongodb.DB.command(DB.java:160) ~[mongo-java-driver-2.7.3.jar:na]
at com.mongodb.DB.command(DB.java:183) ~[mongo-java-driver-2.7.3.jar:na]
at com.mongodb.DBCollection.getCount(DBCollection.java:864) ~[mongo-java-driver-2.7.3.jar:na]
at com.mongodb.DBCollection.getCount(DBCollection.java:835) ~[mongo-java-driver-2.7.3.jar:na]

Caused by: java.net.SocketException: Operation timed out
at java.net.SocketInputStream.socketRead0(Native Method) ~[na:1.6.0_31]
at java.net.SocketInputStream.read(SocketInputStream.java:129) ~[na:1.6.0_31]
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) ~[na:1.6.0_31]
at java.io.BufferedInputStream.read1(BufferedInputStream.java:258) ~[na:1.6.0_31]
at java.io.BufferedInputStream.read(BufferedInputStream.java:317) ~[na:1.6.0_31]
at org.bson.io.Bits.readFully(Bits.java:35) ~[mongo-java-driver-2.7.3.jar:na]