ขอคำแนะนำครับ เรื่องการ วนลูบ เพื่อบันทึกข้อมูลจำนวนมาก ในครั้งเดียว

ถาม-ตอบ แนะนำไอเดียว โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา ขอคำแนะนำครับ เรื่องการ วนลูบ เพื่อบันทึกข้อมูลจำนวนมาก ในครั้งเดียว

ขอคำแนะนำครับ เรื่องการ วนลูบ เพื่อบันทึกข้อมูลจำนวนมาก ในครั้งเดียว

ผมเขียนโปรแกรม ด้วย php ทำการอ่านไฟล์ ที่อัพโหลดขึ้นไป ผ่านเว็บ ครับ
ไฟล์ นั้นเป็นไฟล์ .txt ขนาดไม่ใหญ่ ไม่เกิน 1mb
โดยที่ ในไฟล์ .txt ที่ว่าจะเป็นข้อมูลการเปิดเมินครับ
ซึ่งได้มาจาก ใบประเมินที่ใช้เครื่องตรวจ
มันจะออกมาเป็นตัวเลข 1ใบ ต่อ 1แถว

ในกณีที่ว่า การตรวจ1ครั้ง จะมีจำนวนมาก หลายพันใบ ซึ่ง หมายถึงว่า ในนั้นจะมีข้อมูลหลายพันแถว

ผมได้เขียนโปรแกรม เพื่อ อ่านข้อมูลทีละแถว แล้ว บันทึกลง database (MySQL) จากนั้นถึงเอาข้อมูลมา ออก report เป็น PDF อีกที
ซึ่งในส่วนนี้ ทำได้หมดแล้วครับ เสร็จเรียบร้อยตรงตามต้องการ

แต่มาพบปัญหาตรงที่ ข้อมูลที่ นำมาใช้ ทดสอบ ระบบ ผมลองแค่ 50แถว
โปรแกรม มันสามารถ อ่านและบันทึกลง database ได้ปกติครับ

แต่เมื่อลองข้อมูลที่มากขึ้น ผมลองมากขึ้นจากเดิม 1เท่า คือ 100แถว
ผลปรากฎว่า error ไปเลยครับ

จะมีวิธีแก้ปัญหาอย่างไรได้บ้างครับ
ถ้าต้องการทำผ่านเว็บด้วย php เพราะส่วนตัวนั้นถนัด php และตอนนี้สามารถออก report ได้ตามต้องการแล้วด้วย

ซึ่งไม่สามารถที่จะแก้วิธีการนำเข้าข้อมูลได้ครับ (จำนวนใบประเมินที่เค้าส่งมาตรวจ)
คือเค้าจะตรวจทีเดียว ทีละหลายๆพันใบ แล้วจะได้ ผลสรุปมาเป็นไฟล์ 1 ไฟล์ เท่านั้น

ตอนนี้ผมออกแบบ database ที่เก็บผลประเมินแบบนี้ครับ
มี tb_data กับ tb_data_detail
ซึ่งใน tb_data จะเก็บพวกรายละเอียดหลักๆของใบประเมิน
ส่วน tb_data_detail จะเก็บคะแนนจากใบประเมินครับ โดยที่ 1ใบประเมิน = 20ข้อ

ดังนั้นจะหมายถึง tb_data 1 record จะมีข้อมูล ใน tb_data_detail อีก 20 record ด้วย

จากตัวอย่างข้างบน ที่ผมทดสอบ 50แถวใน ไฟล์ .txt มันจะได้
tb_data 50 record กับ tb_data_detail 1000 record

การ insert ข้อมูล ผม ให้มัน loop 2ชั้น คือ

while(){

Insert tb_data

while(){ //loop 20 รอบ

Insert tb_data_detail

}

}

ผมควรเปลี่ยนการออกแบบฐานข้อมูล โดยที่ข้อมูลใน tb_data_detail นำไปยัด อยู่ใน tb_data ดีกว่าไหมครับ สำหรับข้อมูลจำนวนเยอะมากขนาดนี้ แบบว่า ไปสร้าง field เพิ่มใน tb_data อีก 20 field เพื่อเก็บ ผลประเมิน จำนวน 20ข้อ อะครับ
 



Likit 30-08-2010 16:19:06

คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )

 ความคิดเห็นที่ 1

ลองทำตามที่เข้าไปก่อน แต่ถ้าให้แนะนำ ก็ให้อ่านข้อมูลมาทีละ 50 แถวแล้วก็ คิวรี่บันทึก ตั้งเวลาด้วย javascript ส่งตัวแปรไปเริ่มนับ บรรทัดต่อๆ ไป



ninenik 30-08-2010
 ความคิดเห็นที่ 2

ขอบคุณครับ



Likit 31-08-2010 09:46






เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ