Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Klasse in DB opslaan?

Pagina: 1
Acties:
  • 2.476 views

  • ChessSpider
  • Registratie: Mei 2006
  • Laatst online: 29-09 19:35
Hey mede-tweakers,

Ik heb hier een gast op mijn MSN-lijst die zweert bij het opslaan van een PHP-klasse in de database.
Dan heb je bijvoorbeeld een klasse gebruikers, met de variabelen gebruikersnaam en een paar functies, en dan doet hij serialize() over de gehele klasse en zet hij het in de database, waarna je de gehele klasse op kan halen via een SELECT statement. Unserialize() erover en je kan hem meteen gebruiken.

Alle veranderingen worden opgeslagen in de gebruikersklasse, waarna de gehele klasse weer in de database word gestopt. Natuurlijk moeten ook alle veranderingen via de klasse gaan, je kan niet even in de database een wachtwoordje aanpassen.

Zelf haalde ik altijd bij de Constructor de meeste gegevens die ik nodig had uit de database, en soms als ik meer gegevens nodig had in de aparte methodes nog een keer.. Op zijn manier haal je in 1 keer de gehele klasse eruit en heb je meteen altijd alle gegevens die je ooit nodig hebt.

Ik heb nog nooit over zijn manier gehoord.. Wat vinden jullie ervan?

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Leuk zoeken, sorteren en informatie gebruiken uit die DB dan :X :X :X
* RobIII turft lijntje erbij. Weer iemand die het wiel opnieuw heeft uitgevonden in vierkante variant :X

[ Voor 42% gewijzigd door RobIII op 06-05-2008 11:01 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • ludo
  • Registratie: Oktober 2000
  • Laatst online: 26-04-2024
:o

Ik heb die manier helaas iets te vaak gehoord... Dat mensen zoiets serieus toepassen vind ik best eng. Het is natuurlijk volstrekt belachelijk, zeker in het geval dat jij beschrijft. Alle kracht van een relationele database heb je hiermee uitgeschakeld. Op deze manier is het misschien nog makkelijker/sneller om de klasse naar een bestand op je filesystem te serializen...

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Sja dat kan soms handig zijn, als ge grotere dingen hebt, dan moet ge neit constant een apparte mapping schrijven, maar gewoon het object erin rammen, als zijn de binairy oid.

Slecht of goed? Dat hangt echt af van de overhead die ge ermee krijgt, u user zit zowiezo in de database, dan wordt het een beetje groter (door de XML, ik heb geen idee hoe PHP serializeerd).

En het is natuurlijk een keuze. Als ge echt door en door OO werkt, kunt ge met serialize altijd ervoor zorgen dat ge met objecten werkt.

Aan u de keuze ;)

Going for adventure, lots of sun and a convertible! | GMT-8


  • RAJH
  • Registratie: Augustus 2001
  • Niet online
Je kunt dat beter gebruiker gaan maken van een OR-mapper. Trouwens sla je geen klasse op in de database maar een object ;)

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
En dan voeg je een keer een veld toe aan je Gebruiker klasse en moet je alle data uit je database gaan halen, converteren en weer opslaan. Of je wilt alle gebruikers die achternaam x hebben?

Ik zou echter ook niet de data in de constructor van de class ophalen. Je kan beter een degelijke datalaag gebruiken, die je instanties vult. De Class die gepersist word kan het best niks weten van de manier hoe hij opgeslagen word. Ten eerste word je class dan niet vervuild met database logica ( Die dan waarschijnlijk ook weer in meerdere classes gecopy paste word ) en als je later nog eens wijzigingen wilt maken aan de opslag hoef je alleen die laag aan te passen.

[ Voor 4% gewijzigd door Woy op 06-05-2008 11:04 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Cloud
  • Registratie: November 2001
  • Laatst online: 03-11 10:25

Cloud

FP ProMod

Ex-moderatie mobster

Er zijn een paar gevallen waarin het handig kan zijn, maar over het algemeen (en zeker voor zoiets als een gebruikerstabel!) is het zéér onpraktisch.

Bijvoorbeeld: Hoe log je in?

Alle gebruikers ophalen vanuit de DB en in een array plaatsen. Alle elementen deserialiseren, en daarna door alle elementen heenlopen om te kijken of het wachtwoord klopt met het opgeslagen wachtwoord in het geserialiseerde object
Nee, handig. :X

Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana


  • ChessSpider
  • Registratie: Mei 2006
  • Laatst online: 29-09 19:35
RAJH schreef op dinsdag 06 mei 2008 @ 11:03:
Je kunt dat beter gebruiker gaan maken van een OR-mapper. Trouwens sla je geen klasse op in de database maar een object ;)
strikt gezien een string ;)
http://nl2.php.net/manual/en/function.serialize.php


@rwb;
een veld toevoegen is zo simpel als een nieuwe variabale aanmaken..

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
wolkje schreef op dinsdag 06 mei 2008 @ 11:04:
Er zijn een paar gevallen waarin het handig kan zijn, maar over het algemeen (en zeker voor zoiets als een gebruikerstabel!) is het zéér onpraktisch.
Een van de weinige dingen waar ik me bij kan bedenken dat het nuttig kan zijn is iets van een Sessie tabel die gepersist moet worden.
ChessSpider schreef op dinsdag 06 mei 2008 @ 11:05:
[...]
@rwb;
een veld toevoegen is zo simpel als een nieuwe variabale aanmaken..
Maar als je de volgende class serialized
code:
1
2
3
4
5
class Gebruiker
{
      Naam;
      Achternaam;
}

Daarna bedenk je dat je ook een tussenvoegsel wilt hebben en verander je de code naar
code:
1
2
3
4
5
6
class Gebruiker
{
     Naam;
     Tussenvoegsel;
     Achternaam;
}

Dan gaat het vast niet goed als je de oude geserializde versie gaat deserialiseren.

[ Voor 42% gewijzigd door Woy op 06-05-2008 11:09 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Cloud
  • Registratie: November 2001
  • Laatst online: 03-11 10:25

Cloud

FP ProMod

Ex-moderatie mobster

Het is natuurlijk afhankelijk van het feit of je erop wilt kunnen sorteren/zoeken in je database. Is dat niet nodig? Dan is het een mogelijkheid om de zaken geserialiseerd op te slaan. Maar dan nog zit je met een aantal zaken.

Stel de definitie van je klasse verandert, er komt een eigenschap bij, of een type van een eigenschap wijzigt. Hoe ga je dan om met de al geserialiseerde instanties die je in je database hebt zitten? :)

Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

ChessSpider schreef op dinsdag 06 mei 2008 @ 10:58:
Ik heb nog nooit over zijn manier gehoord.. Wat vinden jullie ervan?
Lach- en meelijwekkend.

Professionele website nodig?


  • whoami
  • Registratie: December 2000
  • Laatst online: 13:06
wolkje schreef op dinsdag 06 mei 2008 @ 11:08:
Het is natuurlijk afhankelijk van het feit of je erop wilt kunnen sorteren/zoeken in je database. Is dat niet nodig?
Als zoeken niet nodig is, waarom gebruik je dan een database ?

Zoals RobIII al zei: waarom een DB gebruiken als je (alle) gegevens op een dergelijke manier opslaat ?
De DB gebruiken om de consistentie van je data te bewaken ? Errr... zit er niet in
De DB gebruiken om snel correcte gegevens op te zoeken ? Errr... zit er niet in
Redundancy vermijden ? nope
etc..

Wat is het voordeel dan om je DB als een filesysteem met overhead te gaan gebruiken ?

https://fgheysels.github.io/


Verwijderd

Je kunt natuurlijk ook naast het object de hoofdzakelijk (denk aan pass,username) nog er naast in de database zetten, daarnaast kun je dan wel weer snel het object ophalen en snel weer een diepe functie utivoeren (bijvoorbeeld, $blaat->show_user_cars , waarbij de tabel cars weer aan een user vast zit)
Daarna bedenk je dat je ook een tussenvoegsel wilt hebben en verander je de code naar
Ik begrijp niet waarom je ineens een tussenvoegsel wilt hebben, zoiets moet je van te voren hebben uitgedacht en niet ineens gaan veranderen.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
whoami schreef op dinsdag 06 mei 2008 @ 11:13:
Wat is het voordeel dan om je DB als een filesysteem met overhead te gaan gebruiken ?
:P
Verwijderd schreef op dinsdag 06 mei 2008 @ 11:19:
Ik begrijp niet waarom je ineens een tussenvoegsel wilt hebben, zoiets moet je van te voren hebben uitgedacht en niet ineens gaan veranderen.
:D 8)7 Ja joh! Requirements veranderen nooit in the real world! :X

[ Voor 38% gewijzigd door RobIII op 06-05-2008 11:21 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Cloud
  • Registratie: November 2001
  • Laatst online: 03-11 10:25

Cloud

FP ProMod

Ex-moderatie mobster

whoami schreef op dinsdag 06 mei 2008 @ 11:13:
Als zoeken niet nodig is, waarom gebruik je dan een database ?
Ik begrijp wat je bedoelt. In de situatie die de TS beschrijft is het natuurlijk hartstikke fout. :)

Ik bedoelde alleen niet een gehele tabel serialiseren, daar kan ik inderdaad geen enkel goed nut voor bedenken. Maar je zou bijvoorbeeld kunnen denken aan een tabel waarbij één kolom een geserialiseerde hoeveelheid data bevat met details over het record. Het kan prima zijn dat je niet op die details hoeft te kunnen zoeken/sorteren, maar dat dat bij de rest van de informatie wel moet kunnen. :) De vraag is dan natuurlijk waarom je niet die geserialiseerde velden ook als kolommen in je tabel opslaat, maar toch; er zijn toepassingen te bedenken.

Dit alles natuurlijk theoretisch hé. Veruit in de meeste gevallen zal het zeker niet handig zijn.

Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana


  • Kettrick
  • Registratie: Augustus 2000
  • Laatst online: 13:53

Kettrick

Rantmeister!

Verwijderd schreef op dinsdag 06 mei 2008 @ 11:19:
Ik begrijp niet waarom je ineens een tussenvoegsel wilt hebben, zoiets moet je van te voren hebben uitgedacht en niet ineens gaan veranderen.
Helaas werkt dat in de praktijk niet zo, de schaalbaarheid van een applicatie is vrijwel altijd van cruciaal belang. Een applicatie is vrijwel nooit "af" :)

Verwijderd

Dan ga je toch fijn verschillende versies van een class bijhouden en hiervan een versienummer in de database zetten....

Oke, je software word dan 100x zo complex om mee te werken en te debuggen.... maar hey... het kan wel :+

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12:55

Janoz

Moderator Devschuur®

!litemod

Nee, strikt gezien is het gewoon het object en niet de klasse. Dat het uiteindelijk weer een string wordt is niet relevant voor wat RAJH aan wil geven. De opmerking 'een klasse opslaan' betekent namelijk dat je de code opslaat, terwijl gewoon wordt bedoeld dat de instantie, en dus de data opgeslagen wordt.
@rwb;
een veld toevoegen is zo simpel als een nieuwe variabale aanmaken..
Waarna je hele database corrupt is omdat het niet meer gedeserialiseerd kan worden (maar dat was al gezegd)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Kort samengevat; volgende keer dat die vriend komt opscheppen over z'n geniale systeem gewoon netjes blijven knikken en vooral laten blijken hoe geweldig zijn systeem is. Vertel er dan bij dat het voor jou te ingewikkeld is en dat je nooit kunt tippen aan zijn genialiteit en dat je dus opgescheept zit met het ouderwets 'dom' opslaan van je data. En dan langzaam wat stapjes achteruit blijven doen tot 'ie een klein stipje aan de horizon is. Om vervolgens je schaterlach eruit te gooien en jezelf eens lekker op de dijen te kletsen.

Ik denk dat dat nog het beste advies in heel dit topic is ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • ChessSpider
  • Registratie: Mei 2006
  • Laatst online: 29-09 19:35
Janoz schreef op dinsdag 06 mei 2008 @ 11:26:
[...]


Nee, strikt gezien is het gewoon het object en niet de klasse. Dat het uiteindelijk weer een string wordt is niet relevant voor wat RAJH aan wil geven. De opmerking 'een klasse opslaan' betekent namelijk dat je de code opslaat, terwijl gewoon wordt bedoeld dat de instantie, en dus de data opgeslagen wordt.
k :)
Waarna je hele database corrupt is omdat het niet meer gedeserialiseerd kan worden (maar dat was al gezegd)
Sorry, maar hier ben je mij kwijt.. Als je het object opgehaald hebt en geunserialized, kan je controleren of die variabele bestaat en zo niet aanmaken ( lol ).

Ik ben iniedergeval wel overtuigd om hier vandaan te blijven... Ik zelf dacht dat het ook langzamer was.. Ik dacht dat serialize en unserialize() aanroepen wel een groot effect zal hebben op performance, zeker met wat grotere objecten.

  • whoami
  • Registratie: December 2000
  • Laatst online: 13:06
Verwijderd schreef op dinsdag 06 mei 2008 @ 11:19:

Ik begrijp niet waarom je ineens een tussenvoegsel wilt hebben, zoiets moet je van te voren hebben uitgedacht en niet ineens gaan veranderen.
the only constant in software is change. :P

https://fgheysels.github.io/


  • Sebazztiaan
  • Registratie: Februari 2002
  • Laatst online: 13-10 16:33

Sebazztiaan

sebas!

Verwijderd schreef op dinsdag 06 mei 2008 @ 11:25:
Dan ga je toch fijn verschillende versies van een class bijhouden en hiervan een versienummer in de database zetten....

Oke, je software word dan 100x zo complex om mee te werken en te debuggen.... maar hey... het kan wel :+
Of anders kan je ook een 'Memento' pattern gebruiken :)

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
ChessSpider schreef op dinsdag 06 mei 2008 @ 11:33:
Ik dacht dat serialize en unserialize() aanroepen wel een groot effect zal hebben op performance, zeker met wat grotere objecten.
Bij een resultset van een paar tientallen of honderden* records is het misschien amper merkbaar, maar zodra je met een beetje serieuze bak gegevens aan de slag gaat... I'd hate to be around :X Maar dat is dus alleen nog maar (een klein stukje) van het performance nadeel dat je hebt; dan heb je de rest nog niet eens in die berekening meegenomen...

Er is gewoon geen 'nice way' om dit te brengen; het is gewoon van voor-tot-achter kans-loos.

* en honderd+ betwijfel ik al...

[ Voor 25% gewijzigd door RobIII op 06-05-2008 11:44 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Je zou die gast ook naar het [Alg] Slechtste programmeervoorbeelden deel 3 topic kunnen sturen als subtiele hint...

Of hij snapt het of hij gaat die voorbeelden verwerken in zijn eigen code...

Wie weet...

  • Kettrick
  • Registratie: Augustus 2000
  • Laatst online: 13:53

Kettrick

Rantmeister!

RobIII schreef op dinsdag 06 mei 2008 @ 11:35:
[...]

Bij een resultset van een paar tientallen of honderden records is het misschien amper merkbaar, maar zodra je met een beetje serieuze bak gegevens aan de slag gaat... I'd hate to be around :X
Je kan natuurlijk een stored procedure schrijven die de data deserialized in je db en daar een index op maken B) :*). Behalve dat dat leuk is om te doen heb je er geen zak aan, maar het kan :P

als in
code:
1
SELECT iets FROM person WHERE extract_from_serialized(iets,naam) = 'Piet'

[ Voor 9% gewijzigd door Kettrick op 06-05-2008 11:39 ]


  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

RoeLz schreef op dinsdag 06 mei 2008 @ 11:37:
[...]


Je kan natuurlijk een stored procedure schrijven die de data deserialized in je db en daar een index op maken B) :*). Behalve dat dat leuk is om te doen heb je er geen zak aan, maar het kan :P

als in
code:
1
SELECT iets FROM person WHERE extract_from_serialized(iets,naam) = 'Piet'
Move => TheDailyWTF

Stop uploading passwords to Github!


  • Kettrick
  • Registratie: Augustus 2000
  • Laatst online: 13:53

Kettrick

Rantmeister!

Het lijkt heel gek, maar ik denk als je de php serialization vervangt door XML en de stored procedure vervangt voor xpath_query dat het ineens "hip en trendy" is ;)

  • whoami
  • Registratie: December 2000
  • Laatst online: 13:06
Ik denk het niet. :)
XML mag je niet zien als vervanger van een DBMS (al zijn er natuurlijk mensen die dat wel doen, maar dat hoort dan evengoed op The Daily WTF thuis).

https://fgheysels.github.io/


  • Kettrick
  • Registratie: Augustus 2000
  • Laatst online: 13:53

Kettrick

Rantmeister!

whoami schreef op dinsdag 06 mei 2008 @ 12:38:
Ik denk het niet. :)
XML mag je niet zien als vervanger van een DBMS (al zijn er natuurlijk mensen die dat wel doen, maar dat hoort dan evengoed op The Daily WTF thuis).
Uiteraard niet, maar toch zie je een aantal databases die dergelijke xml functies ondersteunen, volgens mij doen MSSQL, Oracle ( sinds versie 9?) en postgres het sowieso. Maar dat neemt idd niet weg dat de manier waarop TS het omschrijft kansloos is 7(8)7

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Idd het is een beetje* stom om xml in je database te gaan stoppen en dan in query's aan de hand van een xpath query data te gaan zoeken. De database zal dan lekker gebruik kunnen maken van al zijn indexes.

*understatment
RoeLz schreef op dinsdag 06 mei 2008 @ 12:52:
[...]
Uiteraard niet, maar toch zie je een aantal databases die dergelijke xml functies ondersteunen, volgens mij doen MSSQL, Oracle ( sinds versie 9?) en postgres het sowieso. Maar dat neemt idd niet weg dat de manier waarop TS het omschrijft kansloos is 7(8)7
Dat iets ondersteund word zegt nog niet dat het handig is om het te gebruiken. Ik ken wel wat applicaties die het gebruiken, maar dat is dan meestal voor xml input die aan een sp aangeleverd word. Maar zelfs daar verdient het niet echt de schoonheidsprijs natuurlijk.

[ Voor 58% gewijzigd door Woy op 06-05-2008 12:56 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Big Womly
  • Registratie: Oktober 2007
  • Laatst online: 01-09 13:39

Big Womly

Live forever, or die trying

Volgens mij wordt serialiseren van objecten om in een DB te steken wel handig als je bijvoorbeeld een foto van een persoon mee wil opslaan in de DB, of als je een DB vol steekt met vogels, dat je hun zangpatroon mee wilt opslaan.

En als je dan toch business objects rechtstreeks wil gaan opslaan in je db, en je object wordt later uitgebreid met extra velden (crf: tussenvoegsel bij de naam) dan kan je natuurlijk nog altijd werken met afgeleide klassen...

When you talk to God it's called prayer, but when God talks to you it's called schizophrenia


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 16-11 19:52

Gerco

Professional Newbie

RoeLz schreef op dinsdag 06 mei 2008 @ 12:52:
Uiteraard niet, maar toch zie je een aantal databases die dergelijke xml functies ondersteunen, volgens mij doen MSSQL, Oracle ( sinds versie 9?) en postgres het sowieso. Maar dat neemt idd niet weg dat de manier waarop TS het omschrijft kansloos is 7(8)7
Ik doe zoiets om berichten in een database op te slaan voor track & trace doeleinden. Zodra het bericht aankomt doe ik er een paar xpath queries op voor de key velden en die sla ik direct in de tabel op. De rest van het bericht gaat dan in zijn geheel in 1 veld.

Dan kun je zoeken op de key data en als je het goede bericht gevonden hebt, kun je het herzenden, weggooien of ter referentie opgeslagen houden. Wat je maar wilt.

Xml in een database is niet altijd zinloos. Het is pas zinloos als je dat gaat gebruiken in plaats van een zinnige relationele datastructuur.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • Kettrick
  • Registratie: Augustus 2000
  • Laatst online: 13:53

Kettrick

Rantmeister!

mbsaerens schreef op dinsdag 06 mei 2008 @ 13:03:
Volgens mij wordt serialiseren van objecten om in een DB te steken wel handig als je bijvoorbeeld een foto van een persoon mee wil opslaan in de DB, of als je een DB vol steekt met vogels, dat je hun zangpatroon mee wilt opslaan.
Dat is gewoon een BLOB, wat als je weetikhoeveel php serialized foto's in je db hebt staan en je migreerd naar Java ?
En als je dan toch business objects rechtstreeks wil gaan opslaan in je db, en je object wordt later uitgebreid met extra velden (crf: tussenvoegsel bij de naam) dan kan je natuurlijk nog altijd werken met afgeleide klassen...
Zodat niet je database maar je hele applicatie kansloos wordt :P
Gerco schreef op dinsdag 06 mei 2008 @ 13:03:
[...]

Ik doe zoiets om berichten in een database op te slaan voor track & trace doeleinden. Zodra het bericht aankomt doe ik er een paar xpath queries op voor de key velden en die sla ik direct in de tabel op. De rest van het bericht gaat dan in zijn geheel in 1 veld.

Dan kun je zoeken op de key data en als je het goede bericht gevonden hebt, kun je het herzenden, weggooien of ter referentie opgeslagen houden. Wat je maar wilt.

Xml in een database is niet altijd zinloos. Het is pas zinloos als je dat gaat gebruiken in plaats van een zinnige relationele datastructuur.
Ik heb het zelf gebruikt om B2B berichte te loggen, het is dan erg handig dat je eens per jaar xpath kan gebruiken om wat orders te zoeken :), maar daar wil je je app niet op bouwen idd.

[ Voor 36% gewijzigd door Kettrick op 06-05-2008 13:07 ]


  • Cloud
  • Registratie: November 2001
  • Laatst online: 03-11 10:25

Cloud

FP ProMod

Ex-moderatie mobster

mbsaerens schreef op dinsdag 06 mei 2008 @ 13:03:
Volgens mij wordt serialiseren van objecten om in een DB te steken wel handig als je bijvoorbeeld een foto van een persoon mee wil opslaan in de DB, of als je een DB vol steekt met vogels, dat je hun zangpatroon mee wilt opslaan.
Die data is toch al binair? Die hoef je niet meer te serializeren natuurlijk.

Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12:55

Janoz

Moderator Devschuur®

!litemod

ChessSpider schreef op dinsdag 06 mei 2008 @ 11:33:
[...]

k :)

[...]


Sorry, maar hier ben je mij kwijt.. Als je het object opgehaald hebt en geunserialized, kan je controleren of die variabele bestaat en zo niet aanmaken ( lol ).
De vraag is of je je gegevens uberhaupt nog wel kunt deserializeren omdat de klasse definitie gewijzigd is.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Big Womly
  • Registratie: Oktober 2007
  • Laatst online: 01-09 13:39

Big Womly

Live forever, or die trying

RoeLz schreef op dinsdag 06 mei 2008 @ 13:05:
Zodat niet je database maar je hele applicatie kansloos wordt :P
Dat moet je dan gaan oplossen met design patterns :)

When you talk to God it's called prayer, but when God talks to you it's called schizophrenia


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
mbsaerens schreef op dinsdag 06 mei 2008 @ 14:00:
[...]


Dat moet je dan gaan oplossen met design patterns :)
Je bedoelt serieus dat je vind dat als je later velden toe wilt voegen je dit maar met sub-classes moet doen?

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 11:21
Janoz schreef op dinsdag 06 mei 2008 @ 13:55:
[...]

De vraag is of je je gegevens uberhaupt nog wel kunt deserializeren omdat de klasse definitie gewijzigd is.
Ik heb het geprobeerd met de volgende stukjes code en dat is geen probleem:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<pre>
<?

class A {
        public $var1;
        public $var2;
}

$a = new A();
$a->var1 = 'The answer to Life, the Universe and Everything';
$a->var2 = 42;

var_dump($a);
file_put_contents('object.dat', serialize($a));

?>
</pre>


Output:
code:
1
2
3
4
5
6
object(A)#1 (2) {
  ["var1"]=>
  string(47) "The answer to Life, the Universe and Everything"
  ["var2"]=>
  int(42)
}


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<pre>
<?

class A {
        public $var1;
        public $var11;
        public $var2;
}

$a = unserialize(file_get_contents('object.dat'));
var_dump($a);

?>
</pre>


Output:
code:
1
2
3
4
5
6
7
8
object(A)#1 (3) {
  ["var1"]=>
  string(47) "The answer to Life, the Universe and Everything"
  ["var11"]=>
  NULL
  ["var2"]=>
  int(42)
}


En dat is ook niet zo raar, want php serialized het als volgt:
code:
1
O:1:"A":2:{s:4:"var1";s:47:"The answer to Life, the Universe and Everything";s:4:"var2";i:42;}
Met variabelennamen erbij dus.

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


  • Cloud
  • Registratie: November 2001
  • Laatst online: 03-11 10:25

Cloud

FP ProMod

Ex-moderatie mobster

Jaap-Jan schreef op dinsdag 06 mei 2008 @ 15:04:
Ik heb het geprobeerd met de volgende stukjes code en dat is geen probleem:
Je bedoelt zeker dat het geen probleem is als je een veld toevoegt? :) Het lijkt me namelijk heel stug dat het bij het wijzigen van veldnamen, -typen en het verwijderen van velden even goed gaat.

Ik vind het trouwens een slechte zaak dat het mogelijk is, maar goed dat is een hele andere discussie mijn mening. Als een klasse definitie gewijzigd is, dan zijn die nieuwe instanties gewoon niet meer gelijk aan instanties van de oude definitie. Punt uit.

edit:
@ hieronder, dat is helemaal waar natuurlijk. Maar m.i. zou een runtime error niet misstaan in zo'n geval. :P

[ Voor 9% gewijzigd door Cloud op 06-05-2008 15:30 ]

Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
wolkje schreef op dinsdag 06 mei 2008 @ 15:09:
Ik vind het trouwens een slechte zaak dat het mogelijk is, maar goed dat is een hele andere discussie.
Je kunt jezelf in zowat elke taal (1-5GL) wel in je voet schieten; of je dat dan ook maar moet doen is een tweede.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 13:34
wolkje schreef op dinsdag 06 mei 2008 @ 15:09:
[...]
Ik vind het trouwens een slechte zaak dat het mogelijk is, maar goed dat is een hele andere discussie. Als een klasse definitie gewijzigd is, dan zijn die nieuwe instanties gewoon niet meer gelijk aan instanties van de oude definitie. Punt uit.
Mwa, dat is niet per definitie waar natuurlijk. Geserialiseerde objecten kunnen prima compatible blijven, zodra de klasse definitie van die objecten wijzigt. Het ligt er maar net aan wat de wijziging inhoudt.
In Java werkt dat net zo. Als je niet expliciet een versie identifier (serialVersionUID) opgeeft, dan loop je een goede kans dat het serialisatie mechanisme besluit dat geserialiseerde objecten niet meer compatible zijn met de nieuwe klasse definitie, terwijl dat misschien volkomen onterecht is. Daarom is het ook altijd aan te bevelen om zelf expliciet een identifier aan serialiseerbare typen te hangen. De meeste style checking tools zullen bijvoorbeeld gelijk mekkeren wanneer je dat niet doet.
Ik vind dat best een goede aanpak.

Verwijderd

Jaap-Jan schreef op dinsdag 06 mei 2008 @ 15:04:
[...]

Ik heb het geprobeerd met de volgende stukjes code en dat is geen probleem:
[...]
Dat zoiets in PHP mogenlijk is wil nog niet zeggen dat het een geaccepteerde methode is in programmeer-land :P.

Een taal als C# bijvoorbeeld zou er keihard op stukgaan :).

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Verwijderd schreef op dinsdag 06 mei 2008 @ 16:58:
[...]
Een taal als C# bijvoorbeeld zou er keihard op stukgaan :).
[Mierenneuk mode]
Een taal als C# ondersteund geen Serializatie. Dat doet de library die bij het .NET Framework meegeleverd word
[/]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 11:21
Verwijderd schreef op dinsdag 06 mei 2008 @ 16:58:
[...]

Dat zoiets in PHP mogenlijk is wil nog niet zeggen dat het een geaccepteerde methode is in programmeer-land :P.

Een taal als C# bijvoorbeeld zou er keihard op stukgaan :).
Het ging in de startpost over PHP, dus dan lijkt het me logisch dat je daar een codevoorbeeld voor gaat maken. :)

En het is ook niet iets wat ik zelf zou gaan implementeren in productie, het is alleen maar een testcase dat het wel mogelijk is, mits de variabelennamen niet wijzigen. :)

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


  • PainkillA
  • Registratie: Augustus 2004
  • Laatst online: 11:44
en hoe wil je nou wat mooie statistieken genereren of mail versturen naar al die gebruikers? Dit is toch gewoon zo onhandig? Wat heeft die gozer eigelijk voor opleiding gedaan of is het een hobbyist? En word dit serieus commercieel gebruikt?

  • ChessSpider
  • Registratie: Mei 2006
  • Laatst online: 29-09 19:35
PainkillA schreef op dinsdag 06 mei 2008 @ 18:45:
en hoe wil je nou wat mooie statistieken genereren of mail versturen naar al die gebruikers? Dit is toch gewoon zo onhandig? Wat heeft die gozer eigelijk voor opleiding gedaan of is het een hobbyist? En word dit serieus commercieel gebruikt?
Hobyist, en ook niet voor alles, zover ik weet. Deze gebruikersklasse was eigenlijk een slecht voorbeeld omdat je natuurlijk problemen hebt met selecteren, dit was een voorbeeld van mij, niet code van hem. Ookal is dit wel de theorie van hoe hij het toepast :)

  • Alain
  • Registratie: Oktober 2002
  • Niet online
Ik ben (net) begonnen aan een studie informatica aan de open universiteit en daar wordt in de module databases gesproken over object georienteerde databases. Wordt dit in de praktijk vaak toegepast?

You don't have to be crazy to do this job, but it helps ....


Verwijderd

AlainS schreef op dinsdag 06 mei 2008 @ 21:01:
Ik ben (net) begonnen aan een studie informatica aan de open universiteit en daar wordt in de module databases gesproken over object georienteerde databases. Wordt dit in de praktijk vaak toegepast?
Ze zijn er wel, maar ben er nog nooit echt tegengekomen.
Wat je wel ziet is een benadering hiervan via OR-mappers.

Maar dit is allebei geheel wat anders waar TS het overheeft. Dat is namelijk gewoon onzin. (en meer zeg ik er niet over)

  • denyos
  • Registratie: Februari 2004
  • Laatst online: 10:45
RoeLz schreef op dinsdag 06 mei 2008 @ 11:37:
[...]


Je kan natuurlijk een stored procedure schrijven die de data deserialized in je db en daar een index op maken B) :*). Behalve dat dat leuk is om te doen heb je er geen zak aan, maar het kan :P

als in
code:
1
SELECT iets FROM person WHERE extract_from_serialized(iets,naam) = 'Piet'
Tja, en als hij als database bijvoorbeeld MSSQL2k5 gebruikt (wat me niet bepaald logisch lijkt) dan zou je met een managed storedprocedure gewoon lekker xpath kunnen gebruiken op je xmldocument. Maarja, als hij al php gebruikt, dan is het idee van het complete object opslaan beetje erg overbodig / raar inderdaad.

Strava


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
denyos schreef op dinsdag 06 mei 2008 @ 22:56:
[...]


Tja, en als hij als database bijvoorbeeld MSSQL2k5 gebruikt (wat me niet bepaald logisch lijkt) dan zou je met een managed storedprocedure gewoon lekker xpath kunnen gebruiken op je xmldocument. Maarja, als hij al php gebruikt, dan is het idee van het complete object opslaan beetje erg overbodig / raar inderdaad.
Als je MSSQL2k5 is het idee net zo overbodig / raar. Soms kan het handig zijn om (stukken) xml op te slaan in je database, maar dan zal je daar niet in moeten zoeken in je database, dat is gewoon niet het sterke punt van databases en dan moet je ze daar ook niet voor willen misbruiken

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • kamerplant
  • Registratie: Juli 2001
  • Niet online
ChessSpider schreef op dinsdag 06 mei 2008 @ 19:48:
[...]

Hobyist, en ook niet voor alles, zover ik weet. Deze gebruikersklasse was eigenlijk een slecht voorbeeld omdat je natuurlijk problemen hebt met selecteren, dit was een voorbeeld van mij, niet code van hem. Ookal is dit wel de theorie van hoe hij het toepast :)
Joh hey, ik zie mijzelf ook als hobbyist maar ik heb ook wel direct door dat dit not-done is :p. Echt wat een vage gast. Kun je hem niet op dit topic wijzen, ik ben benieuwd welke argumenten hij gebruikt :)
RobIII schreef op dinsdag 06 mei 2008 @ 11:00:
* RobIII turft lijntje erbij. Weer iemand die het wiel opnieuw heeft uitgevonden in vierkante variant :X
_O-

🌞🍃


  • YopY
  • Registratie: September 2003
  • Laatst online: 06-11 13:47
Volgens mij wordt het bijna tijd voor "Het Grote Mensen-Die-Denken-Dat-Objecten-Serializen-En-In-Databases-Plaatsen-Slim-Is"-topic, naast een gelijksoortig topic over het plaatsen van php bestanden e.d. in een database. Of gewoon een generiek topic over database misbruik.

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 09:49

Bosmonster

*zucht*

Daar is het slechtste programmeervoorbeelden topic toch al voor?

Dit topic houdt pas op zodra iedereen even heeft kunnen zeggen hoe dom is het om object instanties in de database op te slaan :P

edit: bij deze trouwens dus nog even: Das echt wel heel dom!

[ Voor 14% gewijzigd door Bosmonster op 07-05-2008 13:14 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Bosmonster schreef op woensdag 07 mei 2008 @ 13:14:
Dit topic houdt pas op zodra iedereen even heeft kunnen zeggen hoe dom is het om object instanties in de database op te slaan :P

edit: bij deze trouwens dus nog even: Das echt wel heel dom!
^^ En daarom denk ik dat het verstandig is om hier maar een einde aan te breien. De algemene consensus lijkt me duidelijk en ik zie hier verder ook niet veel nuttigs meer uit ontstaan behalve nogmaals bevestigen hoe 'minder slim' het is en 'aanvallen' op de bedenker hiervan.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1

Dit topic is gesloten.