วิธีเก็บ IP ลงฐานข้อมูลแบบประหยัดพื้นที่

วิธีเก็บ IP ลงฐานข้อมูลแบบประหยัดพื้นที่

ผมคือคนหนึ่ง ที่เมื่อก่อน เก็บ ip ผู้ใช้ลง database ด้วย field char(15) มาโดยตลอด แต่ตอนนี้ ไม่ต้องแล้ว เรามาลดเหลือแค่ 4 byte กัน

ปกติ เวลาที่เราสร้าง field ใน database เพื่อเก็บข้อมูล ที่เป็น ip เราจะต้องสร้าง char(15) หรือบางคนก็สร้าง varchar(15) หรือบางคน (อันนี้น่าจะเป็นคนที่มือใหม่จริงๆ) ก็สร้างเป็นชนิด text เลย ซึ่ง แต่ละกรณี ทำให้เปลืองพื้นที่มาก เอาอย่างเช่น char(15) เราก็ต้องใช้ 15 bytes ต่อการเก็บ 1 หมายเลข IP หรือ varchar ใช้ 16 bytes และ text ใช้ 17 bytes กันเลยทีเดียว นี่ยังไม่นับที่เป็น กรณี UTF-8 อีก เพราะว่าถ้าเป็น UTF-8 ก็จะใช้พื้นที่ 45, 48, 51 byte ตามลำดับ ต่อ1ip เลยทีเดียว ถือว่าเปลืองมากเพราะลองคิดดูว่าหากเป็นแสน record คงจะใช้พื้นที่ไม่น้อยเลย และจะดีกว่ามั้ย ถ้าเราลดเหลือแค่ 4 byte ต่อ 1 ip

วิธีง่ายมากแต่ต้องมีตัวช่วย ก็คือ php function ip2long($ip) และ long2ip($ip) ซึ่งจะทำหน้าที่แปลง ip ให้เป็น ตัวเลข และแปลงตัวเลขกลับมาเป็น ip โดย ฐานข้อมูลเราใช้เพียง int ชนิด unsigned ซึ่งใช้เพียง 4 byte ต่อ 1 record เท่านั้น

วิธีการก็คือ เก็บ ip ใส่ตัวแปร $ip แล้วเอาไปผ่าน

$ip = ip2long($ip);

ก็จะทำให้ $ip เป็นตัวเลขแล้ว เอาไปเก็บในฐานข้อมูลต่อไป

แล้วตอนเอากลับมาก็ใช้

$ip = long2ip($ip);

ก็จะกลับมาเป็น ip เหมือนเดิม

จริงๆไม่ใช่เรื่องใหม่หรอกครับ เค้าใช้กันมานาน ทั่วบ้านทั่วเมือง ผมก็ใช้มาพักหนึ่งแล้ว เลยเอามาแบ่งปันครับ

[PRINT VERSION] เขียน: 2010-08-02 09:41:29 แก้ไข : 2010-08-02 09:41:29 อ่าน : 2575
tag : ip2long, long2ip, เก็บ ip,ip address,ip to database ,เก็บ ip ลงฐานข้อมูล

Comment

Comment
BeYourCyber - 02/08/2010 08:41:29 -
ร่วมพูดคุยในหัวข้อของบทความ วิธีเก็บ IP ลงฐานข้อมูลแบบประหยัดพื้นที่
ผมคือคนหนึ่ง ที่เมื่อก่อน เก็บ ip ผู้ใช้ลง database ด้วย field char(15) มาโดยตลอด แต่ตอนนี้ ไม่ต้องแล้ว เรามาลดเหลือแค่ 4 byte กัน