Wednesday 15 June 2011

java - store data to MongoDB Collection in millisecond -



java - store data to MongoDB Collection in millisecond -

i write application in java store info udp broadcast , store them mongodb. udp sent in millisecond , contain text file separate coma (about 30 fields).

but meet problem follow (problem show in 4-5 minutes run program).

connect success doc inserted connect success doc inserted connect success com.mongodb.mongotimeoutexception: timed out after 10000 ms while waiting server matches anyserverselector{}. client view of cluster state {type=unknown, servers=[{address=127.0.0.1:27017, type=unknown, state=connecting, exception={com.mongodb.mongoexception$network: exception opening socket}, caused {java.net.socketexception: many open files}}] @ com.mongodb.basecluster.getserver(basecluster.java:82) @ com.mongodb.dbtcpconnector.getserver(dbtcpconnector.java:654) @ com.mongodb.dbtcpconnector.access$300(dbtcpconnector.java:39) @ com.mongodb.dbtcpconnector$myport.getconnection(dbtcpconnector.java:503) @ com.mongodb.dbtcpconnector$myport.get(dbtcpconnector.java:451) @ com.mongodb.dbtcpconnector.authenticate(dbtcpconnector.java:624) @ com.mongodb.dbapilayer.doauthenticate(dbapilayer.java:195) @ com.mongodb.db.authenticatecommandhelper(db.java:765) @ com.mongodb.db.authenticate(db.java:721) @ udpgpslistener.main(udpgpslistener.java:108)

and below code in java :

datagramsocket serversocket = new datagramsocket(2020); byte[] receivedata = new byte[2048]; datagrampacket receivepacket = new datagrampacket(receivedata, receivedata.length); serversocket.receive(receivepacket); string dtcollection = new string(receivepacket.getdata(), "utf8"); string[] arrcollection = dtcollection.split(","); string dtfield = "unittime,ab1,ab2,ab3,ab4,ab5,ab6,ab7,cc1,cc2,cc3,cc4,cc5,cc6,cc7,cc8,cc9,cc9,cc10,m01,m02,m03,m04,m05,m06,m07"; string[] arrfield = dtfield.split(","); string gbcollection=""; (int m=0; m<arrcollection.length; m++) { gbcollection+=arrfield[m] + "=" +arrcollection[m] +","; } seek { mongoclient mclient = new mongoclient(); //mongoclient mclient = new mongoclient("127.0.0.1", 27017); db db = mclient.getdb("mms"); system.out.println("connect success"); boolean auth = db.authenticate("user1", "passw0rd".tochararray()); dbcollection coll = db.getcollection("tgps"); basicdbobject doc = new basicdbobject(arrfield[0], arrcollection[0]). append(arrfield[1], arrcollection[1]). append(arrfield[2], arrcollection[2]). append(arrfield[3], arrcollection[3]). append(arrfield[4], arrcollection[4]). append(arrfield[5], arrcollection[5]). append(arrfield[6], arrcollection[6]). append(arrfield[7], arrcollection[7]). append(arrfield[8], arrcollection[8]). append(arrfield[9], arrcollection[9]). append(arrfield[10], arrcollection[10]). append(arrfield[11], arrcollection[11]). append(arrfield[12], arrcollection[12]). append(arrfield[13], arrcollection[13]). append(arrfield[14], arrcollection[14]). append(arrfield[15], arrcollection[15]). append(arrfield[16], arrcollection[16]). append(arrfield[17], arrcollection[17]). append(arrfield[18], arrcollection[18]). append(arrfield[19], arrcollection[19]). append(arrfield[20], arrcollection[20]). append(arrfield[21], arrcollection[21]). append(arrfield[22], arrcollection[22]). append(arrfield[23], arrcollection[23]). append(arrfield[24], arrcollection[24]). append(arrfield[25], new date()); coll.insert(doc); system.out.println("doc inserted"); } catch(unknownhostexception e) { system.err.println(e.getclass().getname() + ": " + e.getmessage() ); } catch(mongoexception e) { e.printstacktrace(); }

i assume

udp sent in millisecond

you mean update may occur every millisecond.

anyway encounter problem:

java.net.socketexception: many open files

i assume receive events in kind of loop.

in case, may problem:

mongoclient mclient = new mongoclient();

you should init mongoclient 1 time before start listening events, otherwise connection opened , never closed every event consume.

this should go obtaining db, authenticating , getting collection. i.e

mongoclient mclient = new mongoclient(); //mongoclient mclient = new mongoclient("127.0.0.1", 27017); db db = mclient.getdb("mms"); system.out.println("connect success"); boolean auth = db.authenticate("user1", "passw0rd".tochararray()); dbcollection coll = db.getcollection("tgps");

all these should happen once before start receiving events.

java mongodb nosql

No comments:

Post a Comment