ปัญหาที่น่าสนใจเกี่ยวกับการเก็บข้อมูลการค้นหา
ว่าในแต่ละวันมีการค้นหาคำไหน จำนวนเท่าไร
จึงลองฝึกออกแบบ key-value ใน redis ดูหน่อย ว่าต้องทำอย่างไรบ้าง ?
โดยมีเป้าหมายเพื่อ

  • เก็บข้อมูลแบบง่าย ๆ
  • ดึงข้อมูลมาดูได้เลย รายวัน แต่ละวันเรียงตามจำนวนมากไปน้อย

มาเริ่มออกแบบเล่น ๆ กันหน่อย

ระหว่างรอขึ้นเครื่องกลับบ้าน
ทำการออกแบบเล่นรอดีกว่า

เริ่มจากการเลือกก่อนว่าจะใช้ data structure อะไรในการเก็บข้อมูล ?

ข้อมูลในแต่ละวัน ข้อมูลการค้นหานับเพิ่มเมื่อซ้ำ ไม่ซ้ำก็เพิ่มไป
เรียงข้อมูลตามจำนวนการค้นหาซ้ำ
ดังนั้น data structure ที่น่าจะเหมาะสมคือ Sorted Set นั่นเอง

ตัวอย่างของการออกแบบ

  • รูปแบบของ key เช่น search:freq:{YYYY-MM-DD}
  • member หรือ สมาชิก ประกอบไปด้วย คำค้นหาต่าง ๆ เช่น word1, word2 เป็นต้น
  • ทำการเพิ่ม score หรือ คะแนนครั้งละ 1
  • ดูข้อมูลในแต่ละวัน
  • ดูข้อมูลตามคำค้นหา

เพียงเท่านี้ก็ใช้งานได้แล้ว
แต่ปัญหาที่ตามมาคือ เรื่อง memory ที่ใช้งาน
ต้องจัดการ expire time และ จะใช้งาน bloom filter เข้ามาแทนได้
ได้เวลาขึ้นเครื่องแล้ว !!!