มีวิธีการป้องกัน select mysql ซ้ำๆไหมครับ (กรณีรันหลายไฟล์)

เริ่มโดย Mrpoohling, 11 มิถุนายน 2018, 21:11:19

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

Mrpoohling

คือผมต้องการรันไฟล์ A โดยใช้ crontab เรียก 4 ครั้งพร้อมกัน

ใน php จะทำการ select mysql ออกมา ซึงปัจจุบันผมใช้วิธี เมื่อ select ให้ insert ลงตาราง log เก็บ id ไว้ว่ารันอะไรอยู่
ส่วนไฟล์ที่ 2,3, 4 ก็จะไปอ่าน log ก่อน โดยใช้คำสั่ง

NOT IN ($Duplicate) <--- อ้างอิงใน log
ประมานนี้ครับ

คือมันก็ใช้งานได้ครับ แต่ว่าใน script มีการเรียก อ่าน ลบใน mysql หลายส่วน ส่งผลให้รู้สึกช้าๆ  :wanwan015:

พอจะมีวิธีไหนที่ select ออกมาไม่ให้ซ้ำกันบ้างครับ


[direct=https://c.lazada.co.th/t/c.bfS0An]9.9 จัดเต็มลดกระหน่ำ[/direct]

icez

สิ่งที่คุณทำเค้าเรียกว่า sharding ครับ

สามารถใช้วิธีระบุเจาะจงไปได้เลยว่า process ที่ 1 รัน id 4,8,12,16,... (n/4)
process ที่ 2 รัน id 1,5,9,13,... (n/4 + 1)
process ที่ 3 รัน id 2,6,10,14,... (n/4 + 2)
process ที่ 4 รัน id 3,7,11,15,... (n/4 + 3)

เท่านี้ก็ไม่ต้องไป query หาแล้วครับว่าอะไรรันไปแล้ว และรันพร้อมกันได้ 100% โดยความเป็นไปได้ที่จะรันซ้ำกัน = 0 ทันที
[direct=http://www.thzhost.com/]THZHost[/direct] SSD Hosting ไทย/สิงคโปร์ พร้อม firewall ป้องกันการยิงเว็บ + scan ไวรัสในเว็บ

Mrpoohling

อ้างถึงจาก: icez ใน 11 มิถุนายน 2018, 23:30:46
สิ่งที่คุณทำเค้าเรียกว่า sharding ครับ

สามารถใช้วิธีระบุเจาะจงไปได้เลยว่า process ที่ 1 รัน id 4,8,12,16,... (n/4)
process ที่ 2 รัน id 1,5,9,13,... (n/4 + 1)
process ที่ 3 รัน id 2,6,10,14,... (n/4 + 2)
process ที่ 4 รัน id 3,7,11,15,... (n/4 + 3)

เท่านี้ก็ไม่ต้องไป query หาแล้วครับว่าอะไรรันไปแล้ว และรันพร้อมกันได้ 100% โดยความเป็นไปได้ที่จะรันซ้ำกัน = 0 ทันที



:P :P ไม่เข้าใจว่าจะเขียนยังไงครับ พอมีโค้ส ตัวอย่าง หรือ คำค้นหา ไหมครับ จะลองค้นหาใน google ดู
[direct=https://c.lazada.co.th/t/c.bfS0An]9.9 จัดเต็มลดกระหน่ำ[/direct]

icez

SELECT ......... WHERE id % 4 = 0

SELECT ......... WHERE id % 4 = 1

SELECT ......... WHERE id % 4 = 2

SELECT ......... WHERE id % 4 = 3
[direct=http://www.thzhost.com/]THZHost[/direct] SSD Hosting ไทย/สิงคโปร์ พร้อม firewall ป้องกันการยิงเว็บ + scan ไวรัสในเว็บ

dekdoo

ไม่ลองตั้ง ให้มันห่างหน่อยล่ะ ห่างกัน 5 วิ อะไรแบบนั้น