ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์CMS & Free Scriptมีวิธีการป้องกัน select mysql ซ้ำๆไหมครับ (กรณีรันหลายไฟล์)
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: มีวิธีการป้องกัน select mysql ซ้ำๆไหมครับ (กรณีรันหลายไฟล์)  (อ่าน 998 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
Mrpoohling
ก๊วนเสียว
*

พลังน้ำใจ: 6
ออฟไลน์ ออฟไลน์

กระทู้: 250



ดูรายละเอียด เว็บไซต์
« เมื่อ: 11 มิถุนายน 2018, 21:11:19 »

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

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

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

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

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


บันทึกการเข้า

icez
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 296
ออฟไลน์ ออฟไลน์

กระทู้: 2,879



ดูรายละเอียด
« ตอบ #1 เมื่อ: 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 ทันที
บันทึกการเข้า

THZHost SSD Hosting ไทย/สิงคโปร์ พร้อม firewall ป้องกันการยิงเว็บ + scan ไวรัสในเว็บ
Mrpoohling
ก๊วนเสียว
*

พลังน้ำใจ: 6
ออฟไลน์ ออฟไลน์

กระทู้: 250



ดูรายละเอียด เว็บไซต์
« ตอบ #2 เมื่อ: 12 มิถุนายน 2018, 07:06:31 »

สิ่งที่คุณทำเค้าเรียกว่า 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 ทันที



 Tongue Tongue ไม่เข้าใจว่าจะเขียนยังไงครับ พอมีโค้ส ตัวอย่าง หรือ คำค้นหา ไหมครับ จะลองค้นหาใน google ดู
บันทึกการเข้า

icez
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 296
ออฟไลน์ ออฟไลน์

กระทู้: 2,879



ดูรายละเอียด
« ตอบ #3 เมื่อ: 12 มิถุนายน 2018, 11:01:56 »

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

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

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

SELECT ......... WHERE id % 4 = 3
บันทึกการเข้า

THZHost SSD Hosting ไทย/สิงคโปร์ พร้อม firewall ป้องกันการยิงเว็บ + scan ไวรัสในเว็บ
dekdoo
สมุนแก๊งเสียว
*

พลังน้ำใจ: 58
ออฟไลน์ ออฟไลน์

กระทู้: 891



ดูรายละเอียด เว็บไซต์
« ตอบ #4 เมื่อ: 12 มิถุนายน 2018, 12:25:46 »

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

หน้า: [1]   ขึ้นบน
พิมพ์