Jeg er i gang med at lave et auktionshus website i Python. Folks konto bliver krediteret når deres bud matcher en andens bud. Pseudo koden ser cirka sådan ud: 1: Hvis bud matcher: 2: Slet bud 3: Beløn sælger 4: Giv køber vare
Men... Hvis nu en ondsindet bruger vil stjæle penge ud af siden kan han oprette en sådan auktion og med lidt kode refreshe siden 1000 gange i sekundet og hvis to eller flere af disse requests "når forbi" linje 1, så bliver han belønnet flere gange ved linje 3. Han kan derefter lave en ny auktion og så videre.
Lidt mere info: * husk at bruge InnoDB tabeller da MyISAM tabeller ikke understoetter transactions * husk at saette transaction isolation level passende (jeg tror at du skal op i repeatable read)
Efter at have søgt på nettet i nogen tid har jeg "bikset" mig sammen til denne løsning: conn = MySQLdb.connect (mysql_host, mysql_user, mysql_password, mysql_database) cursor = conn.cursor(MySQLdb.cursors.DictCursor) cursor.execute("select * from transactions for update",()) print cursor.fetchone() time.sleep(600) conn.commit()
Hvis man kører dette test eksempel 2 gange vil tråd 2 vente på at at tråd 1 bliver færdig (600 sekunder). Er det sådan du mener det bør gøres mest effektivt arne? Det er rimeligt vigtigt for mig at det bliver gjort på den rigtige måde. (send også gerne svar)
BEGIN SET TRANSACTION ISOLATION LEVEL REPEATABLE READ flere SELECT og INSERT statements COMMIT
Men du kan ogsaa bruge:
BEGIN flere SELECT FOR UPDATE og INSERT statements COMMIT
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.