PHP Mysql + Cache

[quote author=siambox.com link=topic=21481.msg204573#msg204573 date=1249310740]

แล้วเครื่องคุณมี memory พอเหรอครับ ถ้าใช้ memcache
เว็บใหญ่ ๆ นี่วันนึงหลายล้าน PV นะครับ เก็บเป็น html ลง
localdisk เร็วกว่าครับ เก็บลง memory กับลง localdisk
ความเร็วแทบไม่ต่างกันเลยครับสำหรับ html ลอง test มาแล้ว
แล้วจะไปเสีย memory ไปทำไมล่ะครับ

ตามที่พี่อัตอธิบายไปครับ เก็บใน memcache ต้องสร้าง tcp connection ยิ่งคนเข้าเยอะยิ่งเปลือง

การ optimize sql + index เป็นอันดับแรกที่ต้องทำตั้งแต่ออกแบบโปรแกรมแล้วครับ
การใช้ cache นั้นเป็นเพราะว่าเมื่อคนเข้าเว็บจำนวนมากๆ หากเราไป query database ทุกครั้งมันก็ไม่ไหวครับ
สมมติว่าหน้าแรกต้องมีการ query 3 คำสั่งใช้เวลาคำสั่งละ 0.01 วินาที รวมเป็น 0.03 วินาที
หากมีคนเรียกหน้าแรกพร้อมกันวินาทีละ 300 คน ก็จะต้องใช้เวลาในการ query 0.03*300 = 9 วินาที
ดังนั้นจะเห็นว่าแค่วินาทีแรกที่คน 300 คนเรียกก็ต้องใช้เวลา 9 วินาทีในการ query แล้ววินาทีที่ 2 3 4 ล่ะ ไม่มีทางทำงานทันได้เลย (จริงๆมีเรื่องของ query cache ของตัว mysql server ซึ่งจะทำให้ใช้เวลาจริงๆน้อยลง แต่หากข้อมูลมีการเปลี่ยนแปลงตลอด query cache ที่เก็บไว้ก็ไม่ได้ถูกใช้งานแต่ต้องไป query ใหม่)

ในกรณีที่การแสดงผลไม่จำเป็นต้อง real time มากนัก เช่นการแสดงกระทู้ล่าสุดของเว็บบอร์ด
เราก็จะใช้วิธีเก็บ query ไว้ใน cache (จะเป็น filecache หรือ memcache ก็ได้) โดยมีระยะเวลา expire หากยังไม่หมดอายุก็เอามาแสดงได้เลยโดยไม่ต้องไปสั่ง query จาก database
สมมติว่า cache ไว้เป็นเวลา 30 วินาที ใน 30 วินาทีนั้นก็จะมีการ query แค่ครั้งแรกครั้งเดียวคือ 0.03 วินาที นอกนั้นเอา cache มาแสดงได้เลย พอครบ30วิก็ query อีกรอบใช้เวลาอีก 0.03 วินาที

[quote author=212cafe.com link=topic=21481.msg204634#msg204634 date=1249323622]
แล้วเครื่องคุณมี memory พอเหรอครับ ถ้าใช้ memcache
เว็บใหญ่ ๆ นี่วันนึงหลายล้าน PV นะครับ เก็บเป็น html ลง
localdisk เร็วกว่าครับ เก็บลง memory กับลง localdisk
ความเร็วแทบไม่ต่างกันเลยครับสำหรับ html ลอง test มาแล้ว
แล้วจะไปเสีย memory ไปทำไมล่ะครับ

lol ที่ทำอยู่ ขนาดฐานข้อมูลก็ซัดไป 15 GB เข้าไปแล้วครับ

(พูดตอนเมา)

ข้อมูลที่ใช้แสดงผลจริงๆ ไม่น่าจะเยอะนะครับ

สำหรับการเก็บ session php ผมก็ใช้ memcache
สำหรับการเก็บ cache ข้อมูลจาก database ถ้าไม่ใช้ filecache ก็ memcache แต่ memcache เปลือง memory อืม เก็บข้อมูลไว้เผื่อมีโอกาสได้ใช้ครับ…

[quote author=siambox.com link=topic=21481.msg204573#msg204573 date=1249310740]
ผมว่าสูงสุดคืนสู่สามัญครับ

[quote author=massacre link=topic=21481.msg204667#msg204667 date=1249350550]
ข้อมูลที่ใช้แสดงผลจริงๆ ไม่น่าจะเยอะนะครับ

สำหรับการเก็บ session php ผมก็ใช้ memcache
สำหรับการเก็บ cache ข้อมูลจาก database ถ้าไม่ใช้ filecache ก็ memcache แต่ memcache เปลือง memory อืม เก็บข้อมูลไว้เผื่อมีโอกาสได้ใช้ครับ…
[/quote]ไอนี่นับเฉพาะที่ใช้แสดงผลแล้วครับ 15GB เนี่ยแหละ
พอทำ cache ออกมามันใช้พื้นที่ไป 50 กว่า GB ได้ lol

โห เยอะมาก แล้ว db จริงๆเท่าไหร่ครับเนี่ย

ของผมทำ cache ที่ localdisk ตกเครื่องละ 4GB*9 เข้าไป ก็เยอะอยู่ครับ
นี่ไม่ได้รวม cache ที่ RP นะครับ