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

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

ThaiSEOBoard.comพัฒนาเว็บไซต์Programmingท่านใดเคยเขียนเว็บที่มีการอัพเดทข้อมูลบน SQLถี่ๆเช่นเว็บเกี่ยวกับเงินบ้างครับ +1
หน้า: 1 [2]  ทั้งหมด   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: ท่านใดเคยเขียนเว็บที่มีการอัพเดทข้อมูลบน SQLถี่ๆเช่นเว็บเกี่ยวกับเงินบ้างครับ +1  (อ่าน 4838 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
kingofdollars
สมุนแก๊งเสียว
*

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

กระทู้: 830



ดูรายละเอียด
« ตอบ #20 เมื่อ: 30 มิถุนายน 2016, 08:07:20 »

พอดีผมไม่ได้เล่น Windows เลยไม่มี Exel ให้ทำ  เอางี้นะครับ ผมจะลองทำหัว ตารางให้ คร่าวๆ  พร้อม ข้อมูล


Table  USer

ID , NAME , BALANCE, INFO (Balance HASH), BALANCE2, INFO2 (Balance HASH), Register Date, STATUS, etc

1 : SYSTEM : 997,000 : XX34HASK2KXD : 1,000,000 :5OL9XHSDS : 2016-06-20 : 1
2 : A : 1000 : 5Ks9zLKDkd : 0 : SKSIKSF3343S :2016-06-28 : 1
3 : B : 2000 : XISLSsJSxXId : 0 : DKXODSLD : 2016-06-29 : 1

ใช้ชื่อ Field ของ Hash balance ให้เป็นชื่อที่เดาไม่ได้ เขาจะได้ไม่รู้ว่าอะไร
HASH INFO เอา UID + BALANCE + Register Date + Salt เป็นต้น
HASH INFO2 เอา UID + BLANCE2 + Register Date + Salt เป็นต้น   <---- yesterday balance


(A) Table Transaction แบบรวม แต่เวลาจะเอารายการของคนรับมาแสดง จะ Query ยากนิดนึง

ID, UID_Send, UID_Receive,  AMOUNT , HASH , DATE .....
1001 : 1 : 2 :  1,000 :  ASKDISD####$SDS : 2016-06-30
1002  : 1 : 3 : 2,000 : SKDFDISKD : 2016-06-30

(B) Table Transaction แบบแยก  แสดงรายการใคร ก็ query เฉพาะ User นั้นๆ

ID , UID , RID, XID . AMOUNT SEND, AMOUNT RECEIVE , HASH , XHASH , DATE ...
1001 : 1 : 2 : 1002 : 1,000 : 0 : DFDKFDSOSd : OSKX#S : 2016-06-30
1002 : 2 : 1 : 1001 : 0 : 1,000 : SKDIEX#SDK :OSKX#S :2016-06-30
1003 : 1 : 3 : 1004 : 2,000 : 0 : SKDI#DSDK : PLXI#SD : 2016-06-30
1004 : 3 : 1 : 1003 : 0 : 2,000 : SDK#SDDdk : PLXI#SD : 2016-06-30

HASH ธรรมดา เอาไว้ตรวจสอบ ยอดเงิน โอนให้ใครเมื่อไหร่ อย่าลืมใส่เกลือ
XHASH เอาไว้จับคู่ เอา HASH ตะกี้มาใส่อะไรเพิ่ม เช่น + UID Send + UID Receive + เกลือ



แบบหลังจะเห็นว่า ที่ ID 1001 เรารู้ได้อย่างไรถึง ID ล่วงหน้า ความจริงก็ Autorun เรารู้อยู่แล้วว่าเป็น ID อะไร แต่อย่างผมกันเหนียว ผมเก็บ
Transaction  ID เอาไว้ได้ เพราะต้องเอาไว้ลง row ใหม่อยู่แล้ว แล้วค่อยกลับไปอัพเดท row ที่แล้ว เพราะไม่แน่ว่า สองรายการเข้ามาพร้อมกัน คือการสร้าง row โอนออกพร้อมกัน row ฝั่งรับ อาจจะไม่ได้ run ลำดับนะครับ ต้องเก็บ id เอาไว้ก่อนแล้วค่อย update ทีหลัง

จินตนาการลำดับการโอนของ user ว่ากลายเป็น 1 -> 2, 1 -> 3 , 3 -> 1 , 2 -> 1 ก็เป็นได้ หวังว่าคงเข้าใจนะครับไม่งั้นการ อ้างอิงมั่วแน่

แบบนี้เวลาเราแสดงประวัติการโอนของ USER ID 1  เรา query ของ UID =1 เราก็เห็นว่าใครโอนให้ใคร เท่าไหร่ ได้เลย admin ก็ dril down จับคู่ได้ทันทีว่าคู่ไหน

____________
คราวนี้ เพื่อให้ระบบแม่นยำ คุณก็ทำทั้ง 2 Table แต่ Table แบบแรก ไม่เอาไปคำนวน Balance เอาไว้เก็บอ้างอิงเฉพาะแต่ละวัน ครบ  1 เดือนลบที

พอเจอว่า ยอดเงินมีปัญหา รวมของทุก USer แล้วไม่เท่าเดิม คุณก็ไปเอาข้อมูลแบบง่ายมา (A) มาประมวลผลแบบยาวใหม่ (B)

_____

ปัญหาคือ ใน table (A) มันอาจจะเข้ามา ซ้ำๆ ด้วยการกดรัวๆ ของ User ได้  เราต้องดักด้วย Javascript ในการ submit คือ ถ้ากด send แล้วต้อง Disable ปุ่มกด แล้วส่งข้อมูลไปหา server

ฝั่ง server ต้องตรวจสอบเวลาว่า หากในช่วง 1 นาทีที่ผ่านมา ใน Table(A) มีการส่งคำสั่งจาก User เดียวกันเข้ามา ก็ให้ถามให้แน่ใจก่อนว่า จะทำซ้ำหรือไม่ ดังนั้นถ้าเขาเปิดสองหน้าเพื่อโอนไป user เดียวกัน อีกหน้าก็จะมีการถาม ให้ยืนยันอีกที

______

มาเรื่องคำถาม  ว่ามันจะซ้ำกันอย่างไร
ถ้าคุณดักไว้ตามที่ผมว่า มันคงไม่ซ้ำละครับ แต่เผื่อกันเหนียว

หน้าที่เราก็แค่เช็ค XHASH ว่ามันมีเกิน 2 row หรือไม่ crone ตัวนี้ ทำงานหนักหน่อย ในแต่ละวันที่ประมวลผลตรวจสอบ

___

อย่าลืมว่า SYSTEM ก็เป็น user account อันหนึ่ง คุณต้องใส่ password ยาวๆเอาไว้
ระบบที่ผมเคยทำ มีการหักค่าธรรมเนียมด้วย  ก็จะมี SYSTEM account สำหรับค่าธรรมเนียมด้วย
เวลามีโอนเข้าโอนออก ก็จะหักจาก user account -> fees account ซึ่งเป็นของระบบ
เวลาเราถอนเงินกำไรออก ก็ลดค่าใน fee account ลง แต่ทุกอย่างก็รวมได้เท่าเดิม


คราวนี้การบริหารจัดการคือ

System account คือเงินในระบบ จะต้องเท่ากับเงินที่ท่านมีอยู่ในบัญชีธนาคาร (เนื่องจากผมทำ payment processor)
พอใครโอนเงินสดให้คุณ  เช็คเงินแล้ว ก็ไปอับเดทเงินในระบบ  แบบนี้คุณต้องทำ ตารางมาต่างหาก เพื่อดูข้อมูลการรับจ่ายเงิน  ยุ่งยาก


ผมใช้วิธี ตั้งเงินในระบบไว้ 1 ล้าน  ใครโอนเงินมา ผมก็โอนจาก System  เข้าไป  เราแค่เขียนโค้ดว่า ถ้ามาจาก User ID =1 (system) ก็ระบุชื่อว่า เติมเงิน   ถ้าถอนเงิน  User ก็โอนเข้า System

จะเห็นว่า ดูที่ยอดเงินของ system ถ้าเหลือ 900,000 แสดงว่ามีเงินในระบบอยู่ 100,000 บาท ตรงกับเงินในบัญชีธนาคารไหม

คราวนี้การแก้เงิน 1 ล้าน ให้เป็น 10 ล้าน ก็ทำได้ทันที  ตัวแปร คือ total money ซึ่งฝังอยู่ในโค้ดเลย แล้ว encrypt ด้วย ioncube แม้แต่เจ้าของ host ก็แก้ไม่ได้

พนักงานในบริษัท ก็แก้ไม่ได้ ใครไปยุ่งใน DB แล้วทำให้ hash เพี้ยน ก็หาตัวการได้เลย halt ระบบเอาไว้ได้ก่อน

อย่าลืม Salt แต่ละอันก็ encrypt ไว้หมด ในไฟล์ config แนะนำ ioncube มากกว่า zend ครับ
« แก้ไขครั้งสุดท้าย: 30 มิถุนายน 2016, 08:10:19 โดย kingofdollars » บันทึกการเข้า

kingofdollars
สมุนแก๊งเสียว
*

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

กระทู้: 830



ดูรายละเอียด
« ตอบ #21 เมื่อ: 30 มิถุนายน 2016, 08:09:52 »

ส่วน table crone ต้องทำครับ ไม่งั้น run crone แล้วมั่ว


ID , DATE , LAST TR ID ,status
1001: 2016-06-29 : 29393 , 0

ก่อน run ทุกครั้ง ตรวจสอบว่า run หรือยัง ไม่งั้นมั่วแน่นอน
บันทึกการเข้า

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

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

กระทู้: 1,165



ดูรายละเอียด
« ตอบ #22 เมื่อ: 30 มิถุนายน 2016, 10:57:16 »

ความรู้เลยครับ
« แก้ไขครั้งสุดท้าย: 30 มิถุนายน 2016, 10:57:51 โดย nscyber » บันทึกการเข้า
MapTwoZa
ก๊วนเสียว
*

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

กระทู้: 366



ดูรายละเอียด
« ตอบ #23 เมื่อ: 30 มิถุนายน 2016, 11:02:50 »

เล่นระบบบัญชีคู่เลยหรอ

ถ้าจะทำบัญชีคู่จริง จขกท ต้องไปศึกษาระบบบัญชีคู่ด้วยนะ มันซับซ้อนนิดนึง
บันทึกการเข้า

Good code quality Developer Cheesy
nat-ns
คนรักเสียว
*

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

กระทู้: 109



ดูรายละเอียด
« ตอบ #24 เมื่อ: 30 มิถุนายน 2016, 11:30:52 »

ขอบคุณครับพอเห็นภาพเลย  Embarrassed

ผมสงสัยตรง
อ้างถึง
คราวนี้การแก้เงิน 1 ล้าน ให้เป็น 10 ล้าน ก็ทำได้ทันที  ตัวแปร คือ total money ซึ่งฝังอยู่ในโค้ดเลย
ในเมื่อผมแก้ในสคริป php ผมก็ต้องเข้าไปแก้ใน Table  USer ID 1 ให้ BALANCE เพิ่มจากที่เหลือเข้าไปอีก 10 ล้านเช่น ปัจจุบันเหลืออยู่ 997,000 ก็เพิ่มไปอีก 997,000+10,000,000
ใช่ไหมครับ คือแก้ทั้งฐานข้อมูลและฝั่งสคริปที่ไว้ตรวจสอบ
-----------
ถ้า XHASH มีมากกว่าหนึ่งนี่ก็คือมีการเปลี่ยนแปลงข้อมูลก็จับ A มาทำ B ใหม่ และปรับค่า BALANCE ใน TABLE USER ใหม่ ผมเข้าใจถูกไหมครับ
-----------

ส่วน table crone ต้องทำครับ ไม่งั้น run crone แล้วมั่ว


ID , DATE , LAST TR ID ,status
1001: 2016-06-29 : 29393 , 0

ก่อน run ทุกครั้ง ตรวจสอบว่า run หรือยัง ไม่งั้นมั่วแน่นอน

อันนี้คือของรายการต่อวันใช่ไหมครับ กรณีที่ เมื่อวานทำไปแล้วก็เก็บประวัติไว้ เพื่อจะได้ไม่ต้องย้อนกลับไปคำนวณของเมื่อวานอีก อย่างเช่น TR ID ของวันเก่าที่ status = 1(ทั้งหมด) จะมี TR ID=1001-1005 พอเราจะตรวจเชควันนี้ก็เริ่มที่ 1005-N ไปเลย  wanwan012
บันทึกการเข้า
nat-ns
คนรักเสียว
*

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

กระทู้: 109



ดูรายละเอียด
« ตอบ #25 เมื่อ: 30 มิถุนายน 2016, 12:07:03 »

เล่นระบบบัญชีคู่เลยหรอ

ถ้าจะทำบัญชีคู่จริง จขกท ต้องไปศึกษาระบบบัญชีคู่ด้วยนะ มันซับซ้อนนิดนึง

ไม่ต้องถึงขนาดนั้นก็ได้ครับ จากหลักการข้างบนก็ใช้ได้แล้วครับ แต่ก็ฝากแนะนำด้วยครับ 555 เผื่อนำมาประยุกต์กันได้  wanwan012
บันทึกการเข้า
kingofdollars
สมุนแก๊งเสียว
*

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

กระทู้: 830



ดูรายละเอียด
« ตอบ #26 เมื่อ: 30 มิถุนายน 2016, 13:59:24 »

ขอบคุณครับพอเห็นภาพเลย  Embarrassed

ผมสงสัยตรง
อ้างถึง
คราวนี้การแก้เงิน 1 ล้าน ให้เป็น 10 ล้าน ก็ทำได้ทันที  ตัวแปร คือ total money ซึ่งฝังอยู่ในโค้ดเลย
ในเมื่อผมแก้ในสคริป php ผมก็ต้องเข้าไปแก้ใน Table  USer ID 1 ให้ BALANCE เพิ่มจากที่เหลือเข้าไปอีก 10 ล้านเช่น ปัจจุบันเหลืออยู่ 997,000 ก็เพิ่มไปอีก 997,000+10,000,000
ใช่ไหมครับ คือแก้ทั้งฐานข้อมูลและฝั่งสคริปที่ไว้ตรวจสอบ


นานๆ คงจะทำซักทีตรงนี้  นั่นคือคุณเปลี่ยนตัวแปรใน config ไฟล์  แล้ว แก้ไขข้อมูลใน DB และ HASH ให้ถูกต้องครับ

ทำ script เตรียมไว้เลยครับ บวกเงินทีละ 1,000,000 หรือ ลบทีละ 1,000,000 ในฐานข้อมูล พร้อม HASH ทำเสร็จ ลบไฟล์นี้ทิ้ง (อย่าลืมทำ password hard-coded ไว้เลย เผื่อลืมลบไฟล์)  ได้ยอดที่ต้องการแล้วก็ไปแก้ใน config เอาไว้เปรียบเทียบ


-----------
ถ้า XHASH มีมากกว่าหนึ่งนี่ก็คือมีการเปลี่ยนแปลงข้อมูลก็จับ A มาทำ B ใหม่ และปรับค่า BALANCE ใน TABLE USER ใหม่ ผมเข้าใจถูกไหมครับ

ถ้ามีเกิน 1 คู่เมื่อไหร่ แสดงว่ามีข้อผิดพลาดเกิดขึ้น ก็ต้อง run cron เริ่มจาก นำ balance เก่าแต่ละรายมาคิด แล้วดึงข้อมูลจาก Table A มาคำนวนใหม่ทีละรายการ เพื่อให้ได้ Table B อันใหม่  บางคนเลยอาจจะมียอดเงินติดลบ แต่คิดว่าคงเกิดขึ้นนานๆที
-----------

ส่วน table crone ต้องทำครับ ไม่งั้น run crone แล้วมั่ว


ID , DATE , LAST TR ID ,status
1001: 2016-06-29 : 29393 , 0

ก่อน run ทุกครั้ง ตรวจสอบว่า run หรือยัง ไม่งั้นมั่วแน่นอน

อันนี้คือของรายการต่อวันใช่ไหมครับ กรณีที่ เมื่อวานทำไปแล้วก็เก็บประวัติไว้ เพื่อจะได้ไม่ต้องย้อนกลับไปคำนวณของเมื่อวานอีก อย่างเช่น TR ID ของวันเก่าที่ status = 1(ทั้งหมด) จะมี TR ID=1001-1005 พอเราจะตรวจเชควันนี้ก็เริ่มที่ 1005-N ไปเลย  wanwan012

ถ้ามีปัญหา เราจะได้รู้ว่า ID สุดท้ายของ Table B ที่ไม่มีปัญหาคืออะไร
Algo คือ
1 ตรวจสอบว่า run cron หรือยัง ถ้า run แล้วก็จบ
2 ถ้ายังไม่ run ก็เริ่มรัน พร้อมบันทึกวันที่วันนี้ลงไป
3 หา Hash ที่เกิน 1 คู่ ถ้าเกิน ลบข้อมูลใน table B ทิ้งตั้งแต่ 1006 เป็นต้นไป
4 ถ้า 3 ไม่มีปัญหา เช็คยอดเงินรวม  ถ้ามีปัญหา ก็ทำข้อ 3
5 เอา ID สุดท้ายของ table B ใส่กลับเข้ามา เป็นอันจบ

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

nat-ns
คนรักเสียว
*

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

กระทู้: 109



ดูรายละเอียด
« ตอบ #27 เมื่อ: 01 กรกฎาคม 2016, 02:49:46 »

ขอบคุณครับพอเห็นภาพเลย  Embarrassed

ผมสงสัยตรง
อ้างถึง
คราวนี้การแก้เงิน 1 ล้าน ให้เป็น 10 ล้าน ก็ทำได้ทันที  ตัวแปร คือ total money ซึ่งฝังอยู่ในโค้ดเลย
ในเมื่อผมแก้ในสคริป php ผมก็ต้องเข้าไปแก้ใน Table  USer ID 1 ให้ BALANCE เพิ่มจากที่เหลือเข้าไปอีก 10 ล้านเช่น ปัจจุบันเหลืออยู่ 997,000 ก็เพิ่มไปอีก 997,000+10,000,000
ใช่ไหมครับ คือแก้ทั้งฐานข้อมูลและฝั่งสคริปที่ไว้ตรวจสอบ


นานๆ คงจะทำซักทีตรงนี้  นั่นคือคุณเปลี่ยนตัวแปรใน config ไฟล์  แล้ว แก้ไขข้อมูลใน DB และ HASH ให้ถูกต้องครับ

ทำ script เตรียมไว้เลยครับ บวกเงินทีละ 1,000,000 หรือ ลบทีละ 1,000,000 ในฐานข้อมูล พร้อม HASH ทำเสร็จ ลบไฟล์นี้ทิ้ง (อย่าลืมทำ password hard-coded ไว้เลย เผื่อลืมลบไฟล์)  ได้ยอดที่ต้องการแล้วก็ไปแก้ใน config เอาไว้เปรียบเทียบ


-----------
ถ้า XHASH มีมากกว่าหนึ่งนี่ก็คือมีการเปลี่ยนแปลงข้อมูลก็จับ A มาทำ B ใหม่ และปรับค่า BALANCE ใน TABLE USER ใหม่ ผมเข้าใจถูกไหมครับ

ถ้ามีเกิน 1 คู่เมื่อไหร่ แสดงว่ามีข้อผิดพลาดเกิดขึ้น ก็ต้อง run cron เริ่มจาก นำ balance เก่าแต่ละรายมาคิด แล้วดึงข้อมูลจาก Table A มาคำนวนใหม่ทีละรายการ เพื่อให้ได้ Table B อันใหม่  บางคนเลยอาจจะมียอดเงินติดลบ แต่คิดว่าคงเกิดขึ้นนานๆที
-----------

ส่วน table crone ต้องทำครับ ไม่งั้น run crone แล้วมั่ว


ID , DATE , LAST TR ID ,status
1001: 2016-06-29 : 29393 , 0

ก่อน run ทุกครั้ง ตรวจสอบว่า run หรือยัง ไม่งั้นมั่วแน่นอน

อันนี้คือของรายการต่อวันใช่ไหมครับ กรณีที่ เมื่อวานทำไปแล้วก็เก็บประวัติไว้ เพื่อจะได้ไม่ต้องย้อนกลับไปคำนวณของเมื่อวานอีก อย่างเช่น TR ID ของวันเก่าที่ status = 1(ทั้งหมด) จะมี TR ID=1001-1005 พอเราจะตรวจเชควันนี้ก็เริ่มที่ 1005-N ไปเลย  wanwan012

ถ้ามีปัญหา เราจะได้รู้ว่า ID สุดท้ายของ Table B ที่ไม่มีปัญหาคืออะไร
Algo คือ
1 ตรวจสอบว่า run cron หรือยัง ถ้า run แล้วก็จบ
2 ถ้ายังไม่ run ก็เริ่มรัน พร้อมบันทึกวันที่วันนี้ลงไป
3 หา Hash ที่เกิน 1 คู่ ถ้าเกิน ลบข้อมูลใน table B ทิ้งตั้งแต่ 1006 เป็นต้นไป
4 ถ้า 3 ไม่มีปัญหา เช็คยอดเงินรวม  ถ้ามีปัญหา ก็ทำข้อ 3
5 เอา ID สุดท้ายของ table B ใส่กลับเข้ามา เป็นอันจบ



ขอบคุณมากครับ  wanwan019  wanwan017  wanwan017  wanwan017  wanwan017
บันทึกการเข้า
หน้า: 1 [2]  ทั้งหมด   ขึ้นบน
พิมพ์