abonnement bol.com Unibet Coolblue
  dinsdag 11 juni 2013 @ 22:36:03 #226
187069 slacker_nl
Sicko pur sang
pi_127684607
quote:
0s.gif Op dinsdag 11 juni 2013 21:29 schreef Chandler het volgende:
Mensen, wisten jullie dat als je InnoDB gebruikt voor je tabel/data je met een INSERT ... ON DUPLICATE KEY UPDATE het AUTO_INCREMENT veld ook automatisch veranderd? bij een update dan wel te verstaan ;) want bij een INSERT is het normaal.

Nu gebruik ik zelf een tabel om regels toe te voegen maar ook om regels te updaten (iets wat vele malen vaker voorkomt dan de inserts) dus veranderd continue het AUTO_INCREMENT veld. Ik heb nu al 3,5miljoen regels en weet dat er zo'n 25 miljoen INSERT ON DUPLICATE KEY queries gedaan zijn, dus is het hoogste AUTO_INCREMEN veld niet 3,5mil maar 25.032.321 :). Nu gebruik ik wel een BIGINT voor het veld maar toch... het zal sneller opraken dan dat ik echt 'unieke' records heb.

Maar er is een oplossing *)
http://dev.mysql.com/doc/(...)rement-handling.html

innodb_autoinc_lock_mode

Hebben jullie ervaring met deze optie? en eventuele performance? of zaken waar ik dan bij moet gaan opletten?
Wat stom! Het lijkt me juist dat je een UPDATE doet omdat.. bizar.
In theory there is no difference between theory and practice. In practice there is.
  Moderator / Redactie Sport / Devops dinsdag 11 juni 2013 @ 22:40:29 #227
176766 crew  zoem
zoemt
pi_127684898
quote:
0s.gif Op dinsdag 11 juni 2013 22:12 schreef Chandler het volgende:
@Zoem; maar dat geld niet voor MyISAM :) en andere database formaten (voor zover ik weet).
Juh, ik reageerde ook even specifiek op Inno.
quote:
Maar in mijn geval is het maar 1 script die de tabellen aanvult/update, verder heeft de rest alleen maar lees toegang! zal het dan nog wat uitmaken? ben echt bang dat ik met een jaartje door mijn bigint heen ben :@
Dan ben ik benieuwd om wat voor soort data het gaat. Je zit niet zomaar aan max bigint (2^64-1).

signed van -9.223.372.036.854.775.808 tot 9.223.372.036.854.775.807
unsigned van 0 tot 18.446.744.073.709.551.615

Dat is wel een stuk meer dan jouw 25 miljoen.
pi_127691759
Ik vond het ook nogal apart maar goed...

@zoem; dan moet ik inderdaad nog even stevig mijn best doen... :+
Just say hi!
pi_127802333
quote:
4s.gif Op woensdag 12 juni 2013 01:34 schreef Chandler het volgende:
Ik vond het ook nogal apart maar goed...

@zoem; dan moet ik inderdaad nog even stevig mijn best doen... :+
Ongeveer 290.000 jaar iedere seconde 1 miljoen inserts ... updates uitvoeren. En dan ga ik uit van een signed reeks (waar je alleen het positieve deel gebruikt).
pi_127802410
quote:
0s.gif Op dinsdag 11 juni 2013 00:57 schreef slacker_nl het volgende:

[..]

Daarom hebben ze (s)printf uitgevonden, als er iets lelijkers is dan "dit " . $is . " toch" . $echt_kut en foutgevoeliger dan: "Dit is $misschien toch wel beterder dan $stomme punten $overal moeten $zetten". En ik weet niet precies hoe het in PHP is, maar sprintf("%s is nog prettiger\n", $this->dit());
sprintf() werkt gewoon in php :)
pi_127802477
quote:
2s.gif Op maandag 10 juni 2013 12:35 schreef Tijn het volgende:
Ik denk dat de meeste PHP'ers geen certificering hebben.
Dat is correct :)
pi_127803934
quote:
0s.gif Op vrijdag 14 juni 2013 20:02 schreef Light het volgende:

[..]

Ongeveer 290.000 jaar iedere seconde 1 miljoen inserts ... updates uitvoeren. En dan ga ik uit van een signed reeks (waar je alleen het positieve deel gebruikt).
euh lol, dan kan ik inderdaad nog wel even doorgaan maar is het niet zo dat steeds het veranderen van id's (want een id kan wel 10.000 keer veranderen op deze manier) niet handig is voor het wegschrijven van de data? (steeds het verplaatsen van data?!)
Just say hi!
pi_127804146
quote:
0s.gif Op vrijdag 14 juni 2013 20:40 schreef Chandler het volgende:

[..]

euh lol, dan kan ik inderdaad nog wel even doorgaan maar is het niet zo dat steeds het veranderen van id's (want een id kan wel 10.000 keer veranderen op deze manier) niet handig is voor het wegschrijven van de data? (steeds het verplaatsen van data?!)
Het lijkt me niet dat het id verandert. Als het record nog niet in de database is, wordt het toegevoegd. Als het al wel aanwezig is, moet het uniek zijn op basis van een andere key dan het id (anders heb je niets aan die INSERT .. ON DUPLICATE KEY UPDATE functionaliteit, er moet wel een duplicate key zijn).
  vrijdag 14 juni 2013 @ 20:46:52 #234
187069 slacker_nl
Sicko pur sang
pi_127804227
quote:
0s.gif Op vrijdag 14 juni 2013 20:04 schreef Light het volgende:

[..]

sprintf() werkt gewoon in php :)
Dat weet ik, maar ik wilde heel wat anders zeggen maar blergh ofzo. Ik wilde zeggen: In Perl kan je methods niet gebruiken in string interpolitie, dus dan moet je printf("bla %s", $this->iets()) doen ipv "bla $this->iets()" Maar dat zal in PHP ook vast zo zijn.
In theory there is no difference between theory and practice. In practice there is.
  vrijdag 14 juni 2013 @ 20:48:29 #235
187069 slacker_nl
Sicko pur sang
pi_127804313
quote:
0s.gif Op vrijdag 14 juni 2013 20:45 schreef Light het volgende:

[..]

Het lijkt me niet dat het id verandert. Als het record nog niet in de database is, wordt het toegevoegd. Als het al wel aanwezig is, moet het uniek zijn op basis van een andere key dan het id (anders heb je niets aan die INSERT .. ON DUPLICATE KEY UPDATE functionaliteit, er moet wel een duplicate key zijn).
Waarom zou de data elders worden weggeschreven worden als de key veranderd? Dat zal onder water wel gewoon een pointer zijn naar, dat veranderen maakt weinig verschil..
In theory there is no difference between theory and practice. In practice there is.
pi_127804768
quote:
0s.gif Op vrijdag 14 juni 2013 20:46 schreef slacker_nl het volgende:

[..]

Dat weet ik, maar ik wilde heel wat anders zeggen maar blergh ofzo. Ik wilde zeggen: In Perl kan je methods niet gebruiken in string interpolitie, dus dan moet je printf("bla %s", $this->iets()) doen ipv "bla $this->iets()" Maar dat zal in PHP ook vast zo zijn.
Ik betwijfel of "bla $this->iets()" in php werkt, maar volgens mij moet je dat ook helemaal niet willen gebruiken.
pi_127805667
quote:
0s.gif Op vrijdag 14 juni 2013 20:48 schreef slacker_nl het volgende:

[..]

Waarom zou de data elders worden weggeschreven worden als de key veranderd? Dat zal onder water wel gewoon een pointer zijn naar, dat veranderen maakt weinig verschil..
Voorbeeldje:
1
2
3
4
5
6
7
CREATE TABLE foo (
  id INT NOT NULL AUTO_INCREMENT,
  bar INT NOT NULL,
  views INT NOT NULL DEFAULT 0,
  PRIMARY KEY (id),
  UNIQUE KEY bar (bar)
) ENGINE=InnoDB;

Als ik dan deze query uitvoer:

1INSERT INTO foo (bar, views) VALUES (1,1) ON DUPLICATE KEY UPDATE views = views + 1;

Dan wordt bij de eerste keer netjes een nieuw record aangemaakt met id 1. Als ik de query nog een keer uitvoer, wordt de auto-increment waarde van de tabel wel verhoogd maar het id van de rij verandert niet. Er wordt dan ook geen data verplaatst. Er wordt alleen het volgende nummer geclaimd van de auto-increment lijst en pas daarna wordt gekeken of het invoegen succesvol is. (Als een insert faalt en er staat geen on duplicate key update bij, wordt de auto-increment waarde alsnog wel met 1 verhoogd.)
  vrijdag 14 juni 2013 @ 21:20:01 #238
187069 slacker_nl
Sicko pur sang
pi_127805936
quote:
0s.gif Op vrijdag 14 juni 2013 20:57 schreef Light het volgende:

[..]

Ik betwijfel of "bla $this->iets()" in php werkt, maar volgens mij moet je dat ook helemaal niet willen gebruiken.
Dit is wat het doet:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
cat x.php ; php x.php
<?php

include_once("etc/env.php");

class Foo {
    function bar() {
        return "bar() called";
    }
}

$foo = new Foo();
print "bla $foo->bar()\n";
printf("bla %s\n", $foo->bar());
?>

PHP Notice:  Undefined property: Foo::$bar in /home/xxxx/sbox/php/x.php on line 14
Notice: Undefined property: Foo::$bar in /home/xxxx/sbox/php/x.php on line 14
bla ()
bla bar() called
In theory there is no difference between theory and practice. In practice there is.
  vrijdag 14 juni 2013 @ 21:24:12 #239
187069 slacker_nl
Sicko pur sang
pi_127806172
quote:
0s.gif Op vrijdag 14 juni 2013 21:14 schreef Light het volgende:

[..]

Voorbeeldje:
[ code verwijderd ]

Als ik dan deze query uitvoer:
[ code verwijderd ]

Dan wordt bij de eerste keer netjes een nieuw record aangemaakt met id 1. Als ik de query nog een keer uitvoer, wordt de auto-increment waarde van de tabel wel verhoogd maar het id van de rij verandert niet. Er wordt dan ook geen data verplaatst. Er wordt alleen het volgende nummer geclaimd van de auto-increment lijst en pas daarna wordt gekeken of het invoegen succesvol is. (Als een insert faalt en er staat geen on duplicate key update bij, wordt de auto-increment waarde alsnog wel met 1 verhoogd.)
Je zegt nu dat de id van het record niet veranderd, maar de sequence van de auto-increment wel wordt verhoogd?

Wat gebeurd er als je een rollback doet van die transactie?
In theory there is no difference between theory and practice. In practice there is.
pi_127806365
quote:
0s.gif Op vrijdag 14 juni 2013 21:24 schreef slacker_nl het volgende:

[..]

Je zegt nu dat de id van het record niet veranderd, maar de sequence van de auto-increment wel wordt verhoogd?
Dat zei ik de eerste keer ook. Of althans, dat bedoelde ik.
quote:
Wat gebeurd er als je een rollback doet van die transactie?
Ook dan verandert de sequence van de auto-increment. Eigenlijk ook wel logisch, het terugzetten van de sequence is heel lastig doordat je niet weet wat andere transacties in de tussentijd gedaan hebben.
  vrijdag 14 juni 2013 @ 21:31:10 #241
187069 slacker_nl
Sicko pur sang
pi_127806518
quote:
0s.gif Op vrijdag 14 juni 2013 21:28 schreef Light het volgende:

[..]

Dat zei ik de eerste keer ook. Of althans, dat bedoelde ik.

[..]

Ook dan verandert de sequence van de auto-increment. Eigenlijk ook wel logisch, het terugzetten van de sequence is heel lastig doordat je niet weet wat andere transacties in de tussentijd gedaan hebben.
Ahhh. Ik dacht de hele tijd dat men bedoelde dat het ID van de rij aangepast werd. Maar als het een sequence is snap ik het wel ja.
In theory there is no difference between theory and practice. In practice there is.
pi_127806531
quote:
0s.gif Op vrijdag 14 juni 2013 21:20 schreef slacker_nl het volgende:

[..]

Dit is wat het doet:
[ code verwijderd ]

Het werkt wel als je
1print "bla $foo->bar()\n";
verandert in
1print "bla {$foo->bar()}\n";

Maar ik heb liever leesbaardere code.
  vrijdag 14 juni 2013 @ 21:41:22 #243
187069 slacker_nl
Sicko pur sang
pi_127806915
Wat is de functie van de {} dan?
In theory there is no difference between theory and practice. In practice there is.
pi_127807243
quote:
0s.gif Op vrijdag 14 juni 2013 21:41 schreef slacker_nl het volgende:
Wat is de functie van de {} dan?
Nauwkeuriger aangeven welk stukje van de string als variabele moet worden geinterpreteerd.

In "$foobar" zoekt php naar een variabele $foobar, maar als je "{$foo}bar" of "${foo}bar" schrijft, zoekt php naar de variabele $foo en wordt bar niet als onderdeel van de variabelenaam gezien.
  vrijdag 14 juni 2013 @ 21:50:43 #245
187069 slacker_nl
Sicko pur sang
pi_127807295
quote:
0s.gif Op vrijdag 14 juni 2013 21:49 schreef Light het volgende:

[..]

Nauwkeuriger aangeven welk stukje van de string als variabele moet worden geinterpreteerd.

In "$foobar" zoekt php naar een variabele $foobar, maar als je "{$foo}bar" of "${foo}bar" schrijft, zoekt php naar de variabele $foo en wordt bar niet als onderdeel van de variabelenaam gezien.
Aahh, ja, dat ken ik, maar dat het ook op functies werkt.. apart. Dan zou print "{$foo}->bar() ook moeten werken??? Niet dus. Want Foo kan niet naar een string geconvert worden..
In theory there is no difference between theory and practice. In practice there is.
pi_127807858
quote:
0s.gif Op vrijdag 14 juni 2013 21:50 schreef slacker_nl het volgende:

[..]

Aahh, ja, dat ken ik, maar dat het ook op functies werkt.. apart. Dan zou print "{$foo}->bar() ook moeten werken??? Niet dus. Want Foo kan niet naar een string geconvert worden..
Hmm... "$foo->bar" werkt wel (als er een property bar bestaat) maar "$foo->bar()" werkt niet (als er een method bar bestaat). Dat klinkt wel onlogisch.
pi_127808293
--edit--
Just say hi!
pi_127808347
--edit--
Just say hi!
  vrijdag 14 juni 2013 @ 22:12:12 #249
187069 slacker_nl
Sicko pur sang
pi_127808393
quote:
0s.gif Op vrijdag 14 juni 2013 22:01 schreef Light het volgende:

[..]

Hmm... "$foo->bar" werkt wel (als er een property bar bestaat) maar "$foo->bar()" werkt niet (als er een method bar bestaat). Dat klinkt wel onlogisch.
Ik herhaal mijn woorden op irc: PHP is stom :P
In theory there is no difference between theory and practice. In practice there is.
pi_127819928
quote:
0s.gif Op vrijdag 14 juni 2013 22:12 schreef slacker_nl het volgende:

[..]

Ik herhaal mijn woorden op irc: PHP is stom :P
Nee hoor, mensen die de automatische string-expansion gebruiken zijn stom.
Schuimpje... mijn liefste. Verlaat mij nimmer weer...
abonnement bol.com Unibet Coolblue
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')