
ปัญหาที่น่าสนใจเกี่ยวกับการเก็บข้อมูลการค้นหา
ว่าในแต่ละวันมีการค้นหาคำไหน จำนวนเท่าไร
จึงลองฝึกออกแบบ 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 เข้ามาแทนได้
ได้เวลาขึ้นเครื่องแล้ว !!!