การเรียกใช้แบบสอบถาม Redis SQL ไม่ใช่เรื่องยาก จริง ๆ แล้วฉันหยิบยกประเด็นนี้ขึ้นมาเมื่อสองสามปีก่อนเมื่อพูดถึงเพื่อนที่จัดการโซลูชันคลังข้อมูลในบริษัทค้าปลีก เราเริ่มพูดถึงคำถามของ Redis เมื่อเขาอธิบายปัญหาที่เขาเผชิญ
“เรามีปัญหากับโซลูชันคลังข้อมูลของเรา เรามีกรณีการใช้งานที่เราจำเป็นต้องบันทึกข้อมูลและดำเนินการวิเคราะห์แบบเรียลไทม์ อย่างไรก็ตาม บางครั้งอาจใช้เวลาไม่กี่นาทีเพื่อให้ได้ผลลัพธ์ Redis สามารถช่วยที่นี่ได้ไหม โปรดทราบว่าเราไม่สามารถริปและแทนที่โซลูชันที่ใช้ SQL ได้ทั้งหมดในคราวเดียว เราทำได้ทีละก้าวเท่านั้น ”
ตอนนี้ ถ้าคุณอยู่ในสถานการณ์เดียวกับเพื่อนของฉัน เรามีข่าวดีสำหรับคุณ มีหลายวิธีที่คุณสามารถเรียกใช้แบบสอบถาม Redis และแนะนำ Redis ในสถาปัตยกรรมของคุณโดยไม่ต้อง รบกวนโซลูชันที่ใช้ SQL ปัจจุบันของคุณ
มาสำรวจกันว่าคุณจะทำสิ่งนี้ได้อย่างไร แต่ก่อนที่เราจะไปต่อ เรามีผู้เข้าแข่งขัน Redis Hackathon ที่สร้างแอปของตัวเองที่อนุญาตให้คุณสืบค้นข้อมูลใน Redis ด้วย SQL
ชมวิดีโอด้านล่าง
สร้างตารางของคุณใหม่เป็นโครงสร้างข้อมูล Redis
การแมปตารางของคุณกับโครงสร้างข้อมูล Redis ค่อนข้างตรงไปตรงมา โครงสร้างข้อมูลที่มีประโยชน์ที่สุดที่ควรปฏิบัติตามคือ
- แฮช
- ชุดเรียง
- ชุด
วิธีหนึ่งที่คุณสามารถทำได้คือการจัดเก็บทุกแถวเป็นแฮชด้วยคีย์ที่ยึดตามคีย์หลักของตารางและมีคีย์ที่จัดเก็บไว้ในชุดหรือชุดที่จัดเรียง
รูปที่ 1 แสดงตัวอย่างวิธีการแมปตารางลงในโครงสร้างข้อมูล Redis ในตัวอย่างนี้ เรามีตารางชื่อ Products ทุกแถวจะจับคู่กับโครงสร้างข้อมูลแฮช
แถวที่มีรหัสหลัก 10001 จะเข้าสู่ Hash พร้อมคีย์:ผลิตภัณฑ์:10001 เรามีชุดการเรียงลำดับสองชุดในตัวอย่างนี้:ชุดแรกจะทำซ้ำผ่านชุดข้อมูลโดยคีย์หลัก และชุดที่สองสำหรับการค้นหาตามราคา
ด้วยตัวเลือกนี้ คุณต้องทำการเปลี่ยนแปลงโค้ดของคุณเพื่อใช้การสืบค้น Redis แทนคำสั่ง SQL ด้านล่างนี้คือตัวอย่างบางส่วนของคำสั่ง SQL และ Redis ที่เทียบเท่ากัน:
ก. ใส่ข้อมูล
SQL: insert into Products (id, name, description, price) values = (10200, “ZXYW”,“Description for ZXYW”, 300);
Redis: MULTI HMSET product:10200 name ZXYW desc “Description for ZXYW” price 300 ZADD product_list 10200 product:10200 ZADD product_price 300 product:10200 EXEC
ข. ค้นหาตามรหัสผลิตภัณฑ์
SQL: select * from Products where id = 10200
Redis: HGETALL product:10200
ค. สอบถามตามราคา
SQL: select * from Product where price < 300
Redis: ZRANGEBYSCORE product_price 0 300
ส่งคืนคีย์:ผลิตภัณฑ์:10001, ผลิตภัณฑ์:10002, ผลิตภัณฑ์:10003 ตอนนี้เรียกใช้ HGETALL สำหรับแต่ละคีย์
HGETALL product:10001 HGETALL product:10002 HGETALL product:10003
ใช้ DataFrames เพื่อจับคู่ตารางของคุณกับโครงสร้างข้อมูล Redis โดยอัตโนมัติ
ตอนนี้ ถ้าคุณต้องการรักษาอินเทอร์เฟซ SQL ในโซลูชันของคุณและเปลี่ยนเฉพาะที่จัดเก็บข้อมูลพื้นฐานเป็น Redis เพื่อทำให้เร็วขึ้น คุณสามารถทำได้โดยใช้ไลบรารี Apache Spark และ Spark-Redis
ไลบรารี Spark-Redis อนุญาตให้คุณใช้ DataFrame API เพื่อจัดเก็บและเข้าถึงข้อมูล Redis กล่าวคือ คุณสามารถแทรก อัปเดต และสืบค้นข้อมูลโดยใช้คำสั่ง SQL แต่ข้อมูลจะถูกแมปภายในกับโครงสร้างข้อมูล Redis
ก่อนอื่น คุณต้องดาวน์โหลด spark-redis และสร้างไลบรารีเพื่อรับไฟล์ jar ตัวอย่างเช่น ด้วย spark-redis 2.3.1 คุณจะได้รับ spark-redis-2.3.1-SNAPSHOT-jar-with- dependencies.jar
จากนั้นคุณต้องตรวจสอบให้แน่ใจว่าคุณมีอินสแตนซ์ Redis ของคุณทำงานอยู่ ในตัวอย่างของเรา เราจะเรียกใช้ Redis บน localhost และพอร์ตเริ่มต้น 6379
คุณยังสามารถเรียกใช้การสืบค้นของคุณบนเอ็นจิ้น Apache Spark นี่คือตัวอย่างวิธีการทำสิ่งนี้:
$ spark-shell --jars spark-redis-2.3.1-SNAPSHOT-jar-with-dependencies.jar
scala> import org.apache.spark.sql.SparkSession scala> val spark = SparkSession .builder() .appName("redis-sql") .master("local[*]") .config("spark.redis.host","localhost") .config("spark.redis.port","6379").getOrCreate() scala> import spark.sql scala> import spark.implicits._ scala> sql("create table if not exists products(id string, name string, description string, price int) using org.apache.spark.sql.redis options (table 'product')") scala> sql("insert into products values = ('10200','ZXYW','Description of ZXYW', 300)") scala> val results = sql("select * from products") scala> results.show() +-----+----+-------------------+-----+ | id|name| description|price| +-----+----+-------------------+-----+ |10200|ZXYW|Description of ZXYW| 300| +-----+----+-------------------+-----+
ตอนนี้ คุณยังสามารถใช้ไคลเอ็นต์ Redis เพื่อเข้าถึงข้อมูลนี้เป็นโครงสร้างข้อมูล Redis:
127.0.0.1:6379> keys product* 1) "product:2e3f8611dbe94a588706a2aaea547caa"
วิธีที่มีประสิทธิภาพมากขึ้นคือการใช้คำสั่งสแกน เพราะจะช่วยให้คุณจัดหน้าข้อมูลในขณะที่คุณเลื่อนดูข้อมูล
127.0.0.1:6379> scan 0 match product* 1) "3" 2) 1) "product:2e3f8611dbe94a588706a2aaea547caa" 127.0.0.1:6379> hgetall product:2e3f8611dbe94a588706a2aaea547caa 1) "name" 2) "ZXYW" 3) "price" 4) "300" 5) "description" 6) "Description of ZXYW" 7) "id" 8) "10200"
และเราก็ทำได้ – สองวิธีง่ายๆ ที่คุณสามารถเรียกใช้การสืบค้น Redis SQL ได้โดยไม่หยุดชะงัก ก้าวไปอีกขั้น คุณอาจต้องการค้นหา ทำไม SQL Server ของคุณจึงต้องการ Redis ในสมุดปกขาวฉบับใหม่ของเรา
แต่สำหรับข้อมูลแบบเรียลไทม์กับ Redis นี่เป็นเพียงหนึ่งในหลายวิธีที่คุณสามารถใช้เพื่อมอบประสบการณ์แบบเรียลไทม์
หากคุณต้องการทราบว่า Redis สามารถรับประกันการส่งข้อมูลแบบเรียลไทม์ได้อย่างไร โปรดติดต่อเรา