Hoofdcategorieën
Device Settings

MySQL biedt ondersteuning voor transacties

Door Martin Sturm, dinsdag 24 september 2002 12:41
Bron: MySQL, submitter: ErectionJackson, views: 928

Op de site van MySQL is een bericht verschenen waarin officieel de ondersteuning voor transacties in MySQL wordt bekendgemaakt. Hiermee is één van de nadelen van MySQL weggenomen en wordt de inzetbaarheid in met name high-end omgevingen vergroot. Recentelijk hebben Microsoft en IBM nog kritiek geuit op de open-source database, waarin met name het gebrek aan functionaliteit als zwak punt werd genoemd. MySQL heeft zich echter volgens eigen zeggen nooit gericht op het implementeren van zoveel mogelijk functionaliteit, maar vooral gefocust op snelheid en schaalbaarheid. De laatste tijd lijkt het er echter op dat, onder druk van de gebruikers, er steeds meer functies en mogelijkheden worden geïmplementeerd die ook terug te vinden zijn in de dure pakketen van de concurrenten als Oracle, IBM en Microsoft.

De toevoeging van transacties aan de database biedt veel voordelen voor ontwikkelaars. Dankzij het gebruik van transacties is het voor de programmeur mogelijk om een reeks opdrachten voor de database in één keer te laten uitvoeren. Hierdoor wordt de dataconsistensie vergroot en is er minder kans op fouten in de database als gevolg van hardware storingen. Transacties vereisen het gebruik van InnoDB tabellen en zullen standaard worden ondersteund in de komende 4.0 release van MySQL, welke op dit moment nog volop in ontwikkeling is:

MySQL logo nieuwe stijl“Our transactional engine has already been tested and proven by millions of users in the Open Source community to be an extremely reliable back-end that offers many of the features necessary to develop heavy-duty applications,” said Marten Mickos, MySQL CEO. “Now, MySQL users can get the best of both worlds – transaction support with high concurrency for enterprise applications as well as our non-transactional architecture for lightning fast websites. We anticipate that the new features along with its low cost of ownership will make MySQL an even more attractive option for enterprise users.”

[...] The MySQL database is available in three product configurations: MySQL Pro, MySQL Max and MySQL Classic. MySQL Pro is the standard MySQL offering and now includes the InnoDB storage engine for full transaction support. MySQL Max includes all MySQL Pro functionality as well as the Berkeley DB storage engine (BDB) and other new leading-edge features. MySQL Classic is designed for users who do not require support for transactions.
Volgende 12:43 Logitech introduceert drie nieuwe muizen
Vorige 12:11 Linux cluster met 2048 CPU's voor kernwapensimulatie
Advertentie

Reacties

«  1  2  »

Heel goed.... Want MySql is gewoon een goed pakket en het kan alleen nog maar beter worden.

Langzaam aan begint MySQL de concurenten in te halen :)

Dat vraag ik me af. MySQL is nog altijd iets waar de ontwikkelaars niet direct belang bij hun product hebben. Ze bieden het immers gratis aan dus waarom zouden ze er veel moeite voor doen?

Ik zie MySQL dan ook nooit bij banken e.d. gebruikt gaan worden maar meer voor sites (zoals deze). Het zou immers kunnen dat ze een release uitbrengen waarin een soort van trojan zit. Bovendien lijkt de software ook nooit 'af'. Bijvoorbeeld de snel stijgende versienummers.. D.m.v. die transacties kan er behoorlijk wat werk worden bespaard wat ook tweakers.net ten goede zal komen.

1) Mysql is beschikbaar onder een open source licentie maar OOK onder een traditionele licentie. Bij de laatste krijg je support enzo bij problemen

2) snel oplopende versienummers een probleem?
Ten eerste valt het HEEL erg mee bij mysql. Ten tweede zegt het helemaal NIETS, ligt namelijk helemaal aan de release cycle. Debian linux heeft een (naar mijn mening, (en ja ik weet dat je testing kan draaien, maar dat is geen release)) veel en veel te trage release cycle bijvoorbeeld.

3) Ook commerciele (traditioneel gelicenceerde) software kan trojans bevatten. Bij Mysql zou je in theorie de source kunnen doorspitten om eventueel die trojan te vinden in tegenstelling tot niet open source.

MySQL is nog altijd iets waar de ontwikkelaars niet direct belang bij hun product hebben.
Lees eens de geschiedenis van MySQL...

De ontwikkelaars van MySQL hebben deze database server precies zelf ontwikkeld voor de IT-automatiseringsfirma die ze toen hadden, omdat er geen enkel commercieel systeem bestond dat de door hen gewenste functionaliteit bood. Pas later (toen het al een paar jaar in grote commerciële omgevingen droei) werd het open source gemaakt...

Dat vraag ik me af. MySQL is nog altijd iets waar de ontwikkelaars niet direct belang bij hun product hebben. Ze bieden het immers gratis aan dus waarom zouden ze er veel moeite voor doen?
Ehm, dat geldt ook voor GNU/Linux (en alle andere Free software). Toch zou ik nou niet zeggen dat die software technisch inferieur is ofzo (integendeel zelfs).
Ik zie MySQL dan ook nooit bij banken e.d. gebruikt gaan worden maar meer voor sites (zoals deze).
Dat is ook nooit het doel van MySQL geweest. MySQL is technisch gezien niet eens een volledige database. Maar omdat het relatief kaal is, performt het wel goed. Extreem geschikt voor mensen die die uitgebreide features niet nodig hebben dus (zoals bijvoorbeeld site backends ja).
Het zou immers kunnen dat ze een release uitbrengen waarin een soort van trojan zit.
O natuurlijk. Dat zou bij commerciele software noooooit kunnen gebeuren!
Bij Free software kun je iig nog zelf de source lezen, en jezelf er zo van verzekeren dat er geen backdoor in zit.
Bovendien lijkt de software ook nooit 'af'.
Duh. Software is ook nooit af. Waarom zouden er anders constant nieuwere versies van alle software uitkomen?

Duh. Software is ook nooit af.
Sommige software wel. Je hebt een aantal doelen als programmeur. Wanneer die zijn bereikt is het af. Je kunt niet niet een oneindig aantal doelen bedenken, wel een ontelbaar aantal. Of een dood project, dat kun je vaak ook als 'af' zien. Verder hoogst subjectief wat denk ik afhangt van zaken als perfectionisme, idealisme engenoegen nemen met minder goed, prioriteiten stellen, etcetera.

Dat er steeds nieuwe versies van MySQL uitkomen betekend simpelweg dat het nog in ontwikkeling is. Aan de hand van de versienummers, opvolgers en changelogs kun je zien wat er verder ontwikkelt wordt.

Admins die weinig baat bij het nieuwste van het nieuwste hebben en stabiliteit boven features wensen hebben weinig baat bij steeds maar weer nieuwe releases. Voor hen is het steeds maar weer een afweging maken. Dat kan irritant zijn en wat dat betreft kan ikme best inbeelden dat iemandzich eraan irritant dat bepaalde software nooit 'af' is.
Waarom zouden er anders constant nieuwere versies van alle software uitkomen?
Dat is simpelweg niet waar, er komt niet van alle software nieuwe versies uit. Dat kun je op 10 vingers natellen, en dat weet je.

MySQL wordt ontwikkeld door een bedrijf. Dat bedrijf levert ook support. Ze hebben er dus wel degelijk belang bij dat hun software goed werkt.

En trojans erin stoppen dat is echt onzin. Je kunt notabene zelf de sourcecode nalezen. Ik zie zoiets eerder gebeuren bij closed source producten dan bij open source software.

Dat vraag ik me af. MySQL is nog altijd iets waar de ontwikkelaars niet direct belang bij hun product hebben. Ze bieden het immers gratis aan dus waarom zouden ze er veel moeite voor doen?
In tegenstelling tot andere open source projecten zoals Linux staat er wel een duidelijk commerciële partij achter MySQL en dat is MySQL AB. Daar zijn tevens de belangrijkste ontwikkelaars in dienst. MySQL AB levert o.a. support, verkoopt commerciële licenties en verzorgt trainingen. De ontwikkelaars van MySQL AB hebben dus wel direct baat bij succes van het software.

Wat bedoelen ze precies met transacties?
dat je van tabel naar tabel zo data over kunt zetten, zonder eerst te hoeven dumpen of wat?

Transacties zijn combinaties van sql-query's die gezamelijk moeten worden uitgevoerd of niet.
en dat houd ook in dat bv 1 query niet lukt dat dan de hele transactie wordt teruggedraaid.
het voordeel hiervan is dat de database consitent blijft.

een vb-tje
webwinkel:
User x met wachtwoord y koopt product z
in de ene tabel wordt egzet
user x koopt product z

en andere tabel wordt gezet user x heeft wachtwoord y
als nu de eerste wel lukt end e 2de niet, heb je een database die niet consitent is.
Als je deze 2 nu in een transactie zou plaatsen en er gaat iets mis dan worden alle wijzigingen terugedraaid.

Even een voorbeeldje om aan te geven dat ondersteuning van transacties soms absoluut noodzakelijk is. Stel dat je geld pint uit een automaat. Dan wordt (1) gecontroleerd of je wel voldoende saldo heb, (2) geld van je rekening afgeboekt en (3) uitbetaald. Als de automaat wel 2 uitvoert, maar dan crasht, word je heel erg verdrietig. Transacties voorkomen dergelijke drama's doordat ze 1, 2 en drie bundelen.

consistent
(2 keer zelfde fout, het is dus geen 'typo')

Hij is dan wel consistent met zijn consitent

Transactie support zorgt ervoor dat wat er ook gebeurt er enkel zinnige data in je database zit.
Dit wordt ook gedefinieerd met de ACID regel:
Atomicity: wat in een transactie zit gebeurt allemaal of helemaal niet = meerdere aanpassingen gebeuren allemaal of geen enkel
Consistency: voor en na een transactie zit er enkel zinnige data in de database = data die gebruikt wordt voor een aanpassing mag tijdens de transactie niet gewijzigd worden
Integrity: de inhoud van de database wordt nooit beschadigd door een transactie = gerelateerde data mag niet voor de helft verdwijnen, alles of niets
Durability: een transactie is pas succesvol afgesloten, als de laatste bit op disk is opgeslagen = bij een crasch tijdens een transactie wordt die transactie na de reboot ongedaan gemaakt

Wat je zegt klopt niet helemaal. Bijvoorbeeld de definitie van Durability klopt niet.

Er zijn een aantal eigenschappen die transacties moeten bezitten. De vier basiseigenschappen zijn:

Atomiciteit: Een transactie dient op atomaire wijze te worden uitgevoerd, wat wil zeggen dat de effecten van de uitvoering van een transactie in hun geheel zichtbaar zijn of in het geheel niet. Een zogenaamd rollback-mechanisme wordt gebruikt om gedeeltelijke effecten ongedaan te maken van transacties, die niet kunnen worden afgemaakt.
Correctheid: De uitvoering van een transactie dient in een correcte toestandsovergang van de database te resulteren. Correct betekent hier dat de resulterende database voldoet aan de statische integriteitsregels en dat de overgangstoestand voldoet aan de dynamische integriteitsregels. Een mechanisme voor integriteitsbeheer is verantwoordelijk voor het terug draaien of compenseren van incorrecte transacties.
Isolatie: De gelijktijdige uitvoering van meerdere transacties dient logisch gezien geisoleerd te verlopen, wat betekent dat de transacties elkaar niet ongewenst mogen beinvloeden. Een zogenaamde concurrency-control mechanisme dient voor het garanderen van deze isolatie-eigenschap
Duurzaamheid: De effecten van de uitvoering van een transactie dienen permanent te zijn nadat de transactie succesvol is afgesloten (na de Commit-operatie). Een recovery mechanisme zorgt voor de duurzaamheid van transacties in het geval van fouten, zoals een systeemstoring.

Dat is eigenlijk voor mij het enige wat mysql nog miste.
Voor de rest vind ik het een retegoed product.

LOL, je vergeet subselects, sprocs, replicatie management, views, functions, etc.

met name subselects zouden een erg welkome aanwinst zijn


En waar kom jij vandaan ? 1994 ?

Inmiddels is ADO.NET in de picture gekomen die in combinatie met MS SQL Server 2000 voor een enorme snelheid en schaalbaarheid zorgt.

Hoewel in ADO.NET connection pooling veel beter is uitgewerkt bestaan transacties allang ...

Eigenlijk is het grootste voordeel van MySQL op dit moment de prijs/kwaliteit verhouding (en dit is ook beslist niet onbelangrijk) ... maar wat betreft performance en functionaliteiten loopt het pakket nog achter op zowel MS en Oracle ...

Ow kijk, dat is verdomt handig!
Probleem is alleen, dat bestaande applicaties structureel opnieuw opgebouwd moeten worden.

Toch blijft et prachtig :)
Gj MySQL.

Och, transacties zijn handig, maar dit is echt geen wereldnieuws. Er zijn nog veel meer grote features die ik t.o.v. van de grote jongens mis. Ik noem bijvoorbeeld views, stored procedures, user-defined functions, database roles, replication, backup/restore (laatste twee dus zonder in de server te gaan roeren).

Ik vind het vreemd dat die dingen steeds opgerakeld worden alsm mysql in een nieuwsbericht staat.
Gebruik dan http://firebird.sourceforge.net of http://www.postgresql.org . Alletwee gratis/vrij, en met meer opties dan mysql.

Ik vind dat niet vreemd aangezien dat zaken zijn die je vaak mist (naja beter gezegt, die je kunt missen.. en op het moment dat je die functionaliteit nodig hebt, is dat dus een gemis en is dus mysql geen optie. Uiteraard ga je niet zitten wachten tot mysql dat wel ondersteunt, maar kijk je verder, maar het dus niet vreemd dat dat soort dingen worden aangehaald omdat het imho nou eenmaal essentiele zaken zijn, en als je met bv mssql hebt gewerkt, is het wel heel erg "primitief" om dan zonder stored procs, triggers, foreign keys, en al die andere dingen, moet werken.
(waarbij ik niet bedoel dat mysql slecht is, in veel gevallen is het wel een heel goede keus).

Waar gebruik jij eigenlijk views voor? Ik heb deze nooit zo handig gevonden? (overige punetn die thantos opnoemt benk het mee eens)

Bijvoorbeeld om bepaalde gegevens "achter" te houden, zodat je bv voor een personeelsbestand een view hebt die enkel de medewerkers laat zien zonder salarisinfo, en alleen die mensen die wel de salarisinfo mogen zien, een eigen view geven. Je kan iemand wel rechten geven op de view, zonder rechten op de onderliggende tabel te hebben.

Soms is het ook wel makkelijk voor overzichten die iemand zelf kan maken, dan kun je die gebruiker views laten gebruiken ipv rechtstreeks op de tabellen te werken, waardoor je via aliasses de veldnamen een stuk gebruikers-vriendelijker kan maken (wat vaak meteen programmeurs-onvriendelijk is ;), en je meteen een omschrijving van een foreign key kunt ophalen ipv de gebruiker zelf de link te laten leggen tussen bv debiteurnummer in het ene bestand en de naam in het debiteurenbestand.

En "to my best knowledge" is een view soms (vaak?) sneller omdat de query al geparsed klaar staat.

En soms gebruik ik het ook gewoon voor gemak. Simpel voorbeeld is een ordertje waarbij je via een join de debiteurnaam ophaalt, maak ik een view die dat doet, en vervolgens kun je makkelijk die view query'en zonder de join te moeten doen (gebruik je in Access weleens de Querie-objecten? Daar zijn ze denk ik wel mee te vergelijken)..

Simpel: een view gebruik je om een relatief lange query aan te spreken alsof het een tabel is. Een beetje SQL server staat ook toe om te updaten en te inserten tegen een view aan. mssql 2000 ondersteunt zelfs indexen op views.


// Off-topic

Lekker belangrijk. Je begrijpt het toch :?
Er zijn genoeg proggers die moeite hebben met hun eigen taal, maar scripts schrijven waar je heel wat cursussen voor nodig hebt (8>

// On-topic

Klopt deze tekst wel helemaal:

De toevoeging van transacties aan de database biedt veel voordelen voor ontwikkelaars. Dankzij het gebruik van transacties is het voor de programmeur mogelijk om een reeks opdrachten voor de database in één keer te laten uitvoeren.

Volgens mij is het bij Oracle zo dat de opdrachten gewoon stuk voor stuk uitgevoerd worden, maar dat pas na het geven van een commit (einde transactie) de gegevens uit de data buffer worden schreven naar disk. Instellingen van parameters, andere processen of events kunnen er ook voor zorgen dat data naar de schijf geschreven wordt (temp?), maar dat houd Oracle zelf bij.

Verder controleert het transactie mechanisme ervoor dat (zoals in enkele bovenstaande reactie's al duidelijk is beschreven) een transactie helemaal voltooid en consistent is (inclusief het schrijven naar disk). Is dit niet het geval dan wordt of de data in de buffer niet weggeschreven of de halfwegeschreven data (stroomstoring?) wordt gerestored uit de roll back segmenten (vermoedelijk de innoDB tabellen in MySQL).

Edit: tekst even goed cursief gezet (<i>...</i> lol)
«  1  2  »

Op dit item kan niet meer gereageerd worden.

Volgende 12:43 Logitech introduceert drie nieuwe muizen
Vorige 12:11 Linux cluster met 2048 CPU's voor kernwapensimulatie
VNU Media logo Hosted by True

© 1998 - 2012 Tweakers.net B.V. - Alle rechten voorbehouden - Contact - Jouw privacy - Algemene Voorwaarden

Uitgever van:

Website van het jaar 2011