เวลาต่อฐานข้อมูล php จะเป็น
mysql_connect("localhost","user","pass");
ถ้าเราเปลี่ยนเป็น
mysql_connect("ชื่อ ip","user","pass");
ถ้าหากผมเช่า hosting ไว้กับ a แต่อยากจะใช้ ฐานข้อมูล ที่ตัว b
โดยแน่นอนหน้าเว็บมัน คนล่ะไอพี คนละเครื่องกันไม่ทราบว่ามันได้ไหม?
แล้วมีผลข้างเคียงอะไรบ้าง?
อืดกว่าแน่ๆ
connect ผ่าน unix socket กับผ่าน tcp socket ความเร็วคนละเรื่องครับ
icez
June 22, 2010, 4:10pm
3
localhost = 127.0.0.1
มันก็แค่นั้นเองครับ
ถ้า server ปลายทางอนุญาตให้เชื่อมต่อเข้าไปได้ก็โอเค
เรื่องความเร็ว… ก็ตามด้านบนครับ แต่มันอยู่ระดับ <10 ms
ความรู้สึกคนเราแยกไม่ออกหรอก ถ้าไม่ได้สั่ง connect หลายๆ ครั้งจริงๆ
คือเจตนาที่ถามผมลองเอามาคิดดูว่า ถ้าทำหน้าเว็บที่มี form ให้บันทึกข้อมูลซักอย่าง
แล้วให้บันทึกลง db ตัวเดียวกัน แต่เครื่อง server มันอยู่คนล่ะที่
มันจะช้ามากไหม?ครับ เพราะไม่อยากแยก db กัน
… อืดกว่าแน่ๆ
… <10 ms
?? เคยลองทำกันไหม?ครับ
เคยมี case คือ ช่วงย้าย board ให้ลูกค้ารายนึง
ระหว่างรอ dns update ผมก็ใช้สอง web ชี้มา db ที่ server ใหม่ แล้วลืมแก้กลับ
หลังจากผ่านไประยะหนึ่ง board เริ่มอืดไม่มีสาเหตุ ผมเลยไปไล่ๆ ดู แล้วลองแก้ connection ของ mysql ดู (มั่วๆ เอา)
ผลคือเร็วขึ้นแบบชัดเจน (จาก render page ~1-2 sec กลายเป็น 0.1-0.2 sec เลย)
ปล. ทั้งนี้ไม่รวมถึง board ที่ใหญ่เกินกว่าจะไว้ server เดียวได้นะครับ ถ้า Board ใหญ่มากๆ ก็คงต้องพิจารณาแยก DB แต่ควรจะเป็น network link แยกตะหาก (ประมาณว่า cross cable หลังเครื่องเอาแทน)
โอเค พอจะมองเห็นภาพล่ะครับท่าน
icez
June 22, 2010, 7:00pm
7
เว็บใหญ่ๆ เค้าก็แยก db กันทั้งนั้นอะครับ
เอาเป็นว่าเว็บ b**thai นั่นก็ connect ผ่าน tcp connection ล้วนๆ รู้สึกว่าช้ามั้ยล่ะครับ
ถ้าใช้ persistent ก็ไม่ต่างกันมาหรอก
แต่ถ้า connect ทุกรอบ แล้ว request เยอะ ๆ … ข้ามเครื่องผ่าน tcp จะเห็นผลเลยว่าช้าลง
แต่ถ้าเครื่องเดียวกัน จะใส่ ip จริงเครื่อง, localhost, 127.0.0.1 หรือว่า socket ไม่ต่างกันหรอก
ton1
June 23, 2010, 12:16am
9
ปกติไม่อยากให้ใช้ p_connetc นะครับ
kke
June 23, 2010, 8:30pm
10
เว็บใหญ่ๆส่วนมากก็แยก db ทั้งนั้นแหละครับ
แต่จะอยู่ใน network เดียวกัน วิ่งผ่าน Gb port หรือ fiber
ถ้าอยู่คนละ idc กัน ก็ต้องดูว่าระหว่าง server มันช้าแค่ใหน
ยิ่งถ้าอยู่เมืองนอกกับไทยหากันยิ่งไปกันใหญ่ bw inter บ้านเราก็รู้ๆอยู่
แต่ถ้าใช้งานกับระบบที่ไม่ได้มี request จำนวนมากตลอดเวลา
อย่าง submit ผ่านแบบฟอร์มหน้าเว็บจากหลายๆที่ ก็สามารถใช้งานได้ไม่มีปัญหาอะไร
แค่กำหนด ip เครื่องที่จะ connect เข้ามาไว้ใน allow host ที่เครื่อง db เท่านั้นเอง
ทดสอบดูก็ไม่ยากเขียน code จับเวลาตั้งแต่เริ่ม connect จน close เทียบดูระหว่าง localhost กับ เครื่องอื่นดู