โปรแกรมที่ผมสร้างขึ้นเป็นแบบ Socket (java.net.Socket) ใช้ส่งข้อมูลภายในหน่วยงานครับ ที่ผมทำจะเป็นส่วนของ Client รูปแบบทำงานจะเป็นแบบนี้ครับ
01. ส่งข้อมูลไปให้ Server แล้วรอการตอบกลับจาก Server ว่าได้รับข้อมูลนี้หรือยัง ถูกต้องครบ format หรือไม่, การส่งข้อมูลไปให้ ser ver นี้จะมี group id ของข้อมูลส่งไปให้ด้วย group id นี้เอาไว้ใช้ในการเปิด Connection ไปรับข้อมูลที่ผ่านกระบวนการต่างๆเสร็จสิ้นแล้ว(จะเกิดขึ้นในข้อที่ 2)
02. หลังจากส่งข้อมูลไปให้ Server แล้ว เราจะเปิด Connection กับ server เพื่อรอรับข้อมูลของกลุ่มนั้นๆกลับมา โดยการเปิด Connection ยิงไปหา Server นั้น ได้มีการส่ง group id ไปด้วย เพื่อให้ server ดึงข้อมูลเฉพาะ group id นี้ส่งกลับมาเท่านั้น (นั่นหมายถึงว่า ถ้ามี group id 5 ตัว เราก็จะเปิด Connection 5 อัน)
ระบบนี้เป็นการนำข้อมูลส่งไปประมวลผลที่ Server อื่น ข้อมูลที่จะส่งไปนั้น เริ่มแรกเป็น file .txt ข้อมูลใน .txt จะถูกนำเข้าสู่ table แล้วโดยมี คีย์เป็น filename ครับ แต่การส่งข้อมูลไป-กลับ กับ Server นี้จะไม่มีชื่อ filename ไปเกี่ยวข้องด้วย แต่การแสดงผลให้ end-user ดูนั้น ต้องให้ดูได้ว่า filename นี้มีการส่ง - รับ ไปเป็นจำนวนกี่ reccord แล้ว ซึ่งการส่ง - รับกลับมานั้นจะมีค่า PK ครับ เป็นตัวบอกอีกที
การส่งข้อมูลแบบนี้ จะมี data ที่ต้องทำในหนึ่งวันประมาณ 400,000 เรคคอร์ดครับ นั่นคือ หากนับภายใน 8 ชั่วโมง, จะได้ว่าใน 1 ชั่วโมงต้องส่งให้ได้ 50,000 เรคคอร์ด ครับ ระบบที่ผมสร้างขึ้นมา ผมอาศัย Thread เข้าช่วยครับ การส่งตามกระบวนการข้อ 1 และ 2 นั้น จะใช้จำนวน 3 และ 4 Thread ตามลำดับ
ปัญหาที่พบคือ OutOfMemory ครับ ผู้รู้มีคำแนะนำหรือมีข้อสงสัยเพิ่มเติม หลังไมค์ได้เลยนะครับ
ปล. ผมอาจจะอธิบายไม่ได้ความ งง ยังไงก็ขออภัยไว้ ณ ที่นี้ด้วยครับ ขอบคุณครับ