http://scala.sygneca.com/libs/dbc
http://www.scala-lang.org/api/2.7.0/scala/dbc$package.html
Antar att du får motsvarande funktionallitet via något av
http://squeryl.org/
http://www.sts.tu-harburg.de/people/mi.garcia/ScalaQL/
http://scalaquery.org/
Hittade även en trevlig lista på
http://stackoverflow.com/questions/1362748/wanted-good-examples-of-scala-database-persistence
Av de ramverk jag känner till så tycker jag ScalaQL verkar vara
"rätt"-lösning. Men jag har ingen aning om hur mycket utveckling det
sker på den fronten.
Mvh,
John
2011/3/21 Mikael Ståldal <mikael....@appearnetworks.com>:
> --
> Det här meddelandet skickas till dig eftersom du prenumererar på gruppen
> scala-sverige i Google Groups.
> Om du vill göra ett inlägg i den här gruppen skickar du e-post till
> scala-...@googlegroups.com.
> Om du vill sluta prenumerera på den här gruppen skickar du e-post till
> scala-sverig...@googlegroups.com.
> För fler alternativ, besök gruppen på
> http://groups.google.com/group/scala-sverige?hl=sv.
>
This is a fork of Querulous-generic (Querulous-generic is in turn a fork of the Twitter version). This fork will:
The more advanced features (timeout and so on) probably don't work, since I had to smash some code to get here.
-------------------
/0113+1
Snabbt på gående fot från mobilen.
Mina två senaste kunder har haft problem med just orm. Detta är i java och i det ena talet i kombination med Scala men problemen fanns redan med bara java.
En orm löser som jag ser det två saker.
1. Databasoberoende (nåja. Nästan )
2. Sql är svårt
(off by One: man vill alltid knöka in data i en domänmodell som får se ut hur den vill så länge man slipper skapa objekten själv)
1: problemet försvinner inte. Det ändrar form. Och handen på hjärtat. Hur ofta byter man egentligen?
2: orm är också svårt. Det är minst lika svårt att bli tillräckligt bra på hibernate som att bli tillräckligt bra på sql . Lär man sig sql sådan man hantera alla relarionsdatabaser lär man sig hibernate kan man... Hibernate och man behöver sannolikt kunna sql ändå.
Just nu jobbar jag med att snabba upp rapporter som mina föregångare lämnat efter sig. De befintliga rapporterna tar samtliga mellan 45 minuter och 12 timmar. Oftast runt 5 timmar. Våra "optimerade " rapporter mellan 45s och 10min.
Och då är jag inte ens bra på sql.
Dock har det inte alltid varit smärtfritt att göra optimeringen. Om man arbetat i 5 år med enl mönstret: sköt upp en tångruska ur orm och rensa den med java så upptäcker man då man ska skriva sql mot dbn att modellen lämpar sig bättre att lagra objekt i än att ställa frågor mot.
Vi har fått ta till diverse bricka tricks som joins mot temporära tabeller innehållande unionen av 5 andra tabeller.
Slutsats: jag vet inte om en orm löser något problem som är värt att lösa men jag skulle kunna prata i timmar om vilka de skapar och hur man fastnar i den sämsta av två världar
Ps blir man riktigt vass på orm så ser det ut som om man kan få ägna sig åt att lösa riktiga problem som att skriva ett språk för jvmen som "vanliga" utvecklare förstår:ceylon ds
--
Det här meddelandet skickas till dig eftersom du prenumererar på gruppen scala-sverige i Google Groups.
Om du vill visa den här diskussionen på webben besöker du https://groups.google.com/d/msg/scala-sverige/-/cYMp9Rc5HQsJ.
En orm löser som jag ser det två saker.1. Databasoberoende (nåja. Nästan )
Om man bygger en produkt som olika kunder använder med olika relationsdatabaser så är databasoberoende väldigt viktigt.1: problemet försvinner inte. Det ändrar form. Och handen på hjärtat. Hur ofta byter man egentligen?
Mikael Ståldal |
Senior Software Engineer |
--
Det här meddelandet skickas till dig eftersom du prenumererar på gruppen scala-sverige i Google Groups.
Något som jag har funderat på en tid är att faktiskt börja använda ORM (trots mitt initiala motstånd). Anledningen är CQRS. En mycket enkel variant av CQRS skulle vara att använda ORM för triviala operationer (typ CRUD) och JDBC för icke-triviala sql, där man i det generella fallet har två databaser optimerade för transaktioner resp analys.Men, här funderar jag på om man inte lika gärna kan köra MongoDB istället för ORM för triviala operationer, och JDBC för icke-trivial sql?
Oj gammal tråd ! :)
Min erfarenhet är att ORM:er dels abstraherar bort så mycket av den rationella modellen och den underliggande databasen att du tappar det det mesta den kan erbjuda. Varför backa din modell rationellt om du ändå inte drar nytta av det? Dels så tvingar de in objekt-modellen i ett datacentrikt perspektiv vilket gör att du samtidigt tappar möjligheten och nyttan med en objektorienterad modell.
Resultatet ORM blir därför bara mappning, vilket bara är kostnad.
Eventsourcing och CQRS verkar erbjuda ett alternativ som jag håller på att utvärdera för tillfället. Du får fråga igen om ett år så skall vi se om jag reviderat min ståndpunkt ;)
MVH,
John
För CRUD-operationer funkar allt: ORM, Relationsmodell, Dokumentmodell...
@Joakim Om man för över data kontinuerligt från en dokumentdatabas till en analysdatabas (ES) så får man nästan samma data. Man måste nog räkna med att analysdatabasen ligger några millisekunder efter (vilket kan ge fel).
/olle
2011/12/1 √iktor Ҡlang <viktor...@gmail.com>
2011/12/1 Joakim Ohlrogge <joakim....@agical.com>
Åh vad bra formulerat!
Johnny är rätt badass.
-----------------------------------------------------
Joakim Ohlrogge
Agical AB
Västerlånggatan 79, 2 tr
111 29 Stockholm, SWEDEN
Mobile: +46-708-754004 <tel:%2B46-708-754004>
Blog: johlrogge.wordpress.com <http://johlrogge.wordpress.com>
Twitter: @johlrogge
E-mail: joakim....@agical.se
2011/12/1 John Nilsson <jo...@milsson.nu>
ORMerna lovade databasoberoende och att man skulle slippa skriva SQL
och slippa mappa sina objektstrukturer.
* Numera har vi insett att de inte ger databasoberoende (queries som
fungerar olika). Låtsas du att stöder alla databaser måste du också
testa det. Då börjar det kosta.
* SQL är inte svårt, det är däremot kraftfullt och tydligt. Ofta blir
det merjobb för att få sin ORM att ställa rätt SQL-fråga. Resultatet
blir att jag måste hantera både SQL och en ORM.
* Objektstrukturer: Det är ju trots allt bara data och operationer.
Måste det vara ett objekt? Hämta datan, visa den, manipulera den nära
databasen istället. Ofta har vi rader av data i databasen, vi mappar
dem till objekt, och visar rader av data på en webbsida. - Vad tillför
objektmappningen till lösningen?
* Om du skall testa dina queries inuti din IDE, vad är enklast att
sätta upp och testa: Mappade hibernate-objekt eller ett JDBC-anrop?
Henrik Johansson
On 1 Dec, 10:37, Peter Lundberg <peter.lundberg...@gmail.com> wrote:
> +1 för abstraktionsproblemet som John beskrev!
>
> Jag har även en komplexitetsvy på det: Även om allt fungerar för CRUD,
> tycker jag att man skall man beakta hur mycket komplexitet man drar in i sin
> lösning och inte falla för “golden hammer” anti-pattern.
>
> Och då menar jag inte bara den komplexitet man skriver själv, orm med
> annoteringar ser förföriskt enkelt ut, utan mest hur många lager teknologi
> och rader kod och beroenden som man plockar in för att lösa problemet. Denna
> dolda komplexitet är något jag tycker många inte ser eller tar hänsyn till –
> tar man in teknologin skall man underhålla den över tiden och den skall
> funka. När den inte fungerar måste de som vidareutvecklaresystemet kunna
> felsöka och förstå den, även om några år. Jfr en klassisk orm strack (spring
> + hibernate + cache + jdbc driver + RDBMS + filsystem) med enkla filer
> (java.io + filsystem) med någon nosql (driver + enkla operationer +
> filsystem). Storleken på ens lib katalog i drift är ett grovt men intressant
> mått.
>
> Mvh
> Peter
>
> On 11-12-01 10:15 , "Olle Kullberg" <olle.kullb...@gmail.com> wrote:
>
>
>
>
>
>
>
> > För CRUD-operationer funkar allt: ORM, Relationsmodell, Dokumentmodell...
>
> > @Joakim Om man för över data kontinuerligt från en dokumentdatabas till en
> > analysdatabas (ES) så får man nästan samma data. Man måste nog räkna med att
> > analysdatabasen ligger några millisekunder efter (vilket kan ge fel).
>
> > /olle
>
> > 2011/12/1 √iktor Ҡlang <viktor.kl...@gmail.com>
>
> >> 2011/12/1 Joakim Ohlrogge <joakim.ohlro...@agical.com>
> >>> Åh vad bra formulerat!
>
> >> Johnny är rätt badass.
> >>
>
> >>> -----------------------------------------------------
> >>> Joakim Ohlrogge
> >>> Agical AB
> >>> Västerlånggatan 79, 2 tr
> >>> 111 29 Stockholm, SWEDEN
>
> >>> Mobile: +46-708-754004 <tel:%2B46-708-754004>
> >>> Blog: johlrogge.wordpress.com <http://johlrogge.wordpress.com>
> >>> Twitter: @johlrogge
> >>> E-mail: joakim.ohlro...@agical.se
>
> >>> 2011/12/1 John Nilsson <j...@milsson.nu>
>
> >>>> Oj gammal tråd ! :)
>
> >>>> Min erfarenhet är att ORM:er dels abstraherar bort så mycket av den
> >>>> rationella modellen och den underliggande databasen att du tappar det det
> >>>> mesta den kan erbjuda. Varför backa din modell rationellt om du ändå inte
> >>>> drar nytta av det? Dels så tvingar de in objekt-modellen i ett datacentrikt
> >>>> perspektiv vilket gör att du samtidigt tappar möjligheten och nyttan med en
> >>>> objektorienterad modell.
>
> >>>> Resultatet ORM blir därför bara mappning, vilket bara är kostnad.
>
> >>>> Eventsourcing och CQRS verkar erbjuda ett alternativ som jag håller på att
> >>>> utvärdera för tillfället. Du får fråga igen om ett år så skall vi se om jag
> >>>> reviderat min ståndpunkt ;)
>
> >>>> MVH,
> >>>> John
>
Ja Oracle stödjer faktiskt förvånansvärt mycket, det är nästan som att faktiskt implementerat industrial D!*
Synd bara att PL/SQL är ett så kasst språk.
En annan elegant "mappning" är den som F# kommer med i nästa release. Type generators kallar de det. Intellisense direkt mot databasen med integrerad kodgenerering på det för att typa resultatet.
Mvh,
John
* Se Third Manifesto
Ja Oracle stödjer faktiskt förvånansvärt mycket, det är nästan som att faktiskt implementerat industrial D!*
Synd bara att PL/SQL är ett så kasst språk.
En annan elegant "mappning" är den som F# kommer med i nästa release. Type generators kallar de det. Intellisense direkt mot databasen med integrerad kodgenerering på det för att typa resultatet.
Ah det gör det nog, my bad.
Jodå Oracle och jag har haft en och annan dunst ... ;)
Som det ser ut kommer jag nog ha minst lika roligt med MSSQL. Nåja får se om inte RavenDB kan bidra med lite avslappning.
Mvh,
John
Ah det gör det nog, my bad.
Jodå Oracle och jag har haft en och annan dunst ... ;)
Som det ser ut kommer jag nog ha minst lika roligt med MSSQL. Nåja får se om inte RavenDB kan bidra med lite avslappning.
Higher order SQL FTW! :-)
Det är väl dags för en ny standard snart. Får se om inte Greg uppfinner något djävulsk smart i sin bok. ;-)
Mvh,
John
Men, här funderar jag på om man inte lika gärna kan köra MongoDB istället för ORM för triviala operationer, och JDBC för icke-trivial sql?
* SQL är inte svårt, det är däremot kraftfullt och tydligt. Ofta blir
det merjobb för att få sin ORM att ställa rätt SQL-fråga. Resultatet
blir att jag måste hantera både SQL och en ORM.
2011/12/1 Henrik Johansson <hen...@gmail.com>* SQL är inte svårt, det är däremot kraftfullt och tydligt. Ofta blir
det merjobb för att få sin ORM att ställa rätt SQL-fråga. Resultatet
blir att jag måste hantera både SQL och en ORM.
SQL är bra för att ställa icke-triviala frågor. Men om man har tabeller med många fält så blir det trist och "error-prone" att göra enkel CRUD med SQL.
2011/12/2 Mikael Ståldal <mikael....@appearnetworks.com>2011/12/1 Henrik Johansson <hen...@gmail.com>* SQL är inte svårt, det är däremot kraftfullt och tydligt. Ofta blir
det merjobb för att få sin ORM att ställa rätt SQL-fråga. Resultatet
blir att jag måste hantera både SQL och en ORM.
SQL är bra för att ställa icke-triviala frågor. Men om man har tabeller med många fält så blir det trist och "error-prone" att göra enkel CRUD med SQL.Jag håller med om att man måste hålla tungan rätt i mun när man mappar fälten, men det är en enkel uppgift och du betalar bara för den en gång.
2011/12/2 Henrik Johansson <hen...@gmail.com>2011/12/2 Mikael Ståldal <mikael....@appearnetworks.com>2011/12/1 Henrik Johansson <hen...@gmail.com>* SQL är inte svårt, det är däremot kraftfullt och tydligt. Ofta blir
det merjobb för att få sin ORM att ställa rätt SQL-fråga. Resultatet
blir att jag måste hantera både SQL och en ORM.
SQL är bra för att ställa icke-triviala frågor. Men om man har tabeller med många fält så blir det trist och "error-prone" att göra enkel CRUD med SQL.Jag håller med om att man måste hålla tungan rätt i mun när man mappar fälten, men det är en enkel uppgift och du betalar bara för den en gång.
Jag tycker inte det är en tillfredställande lösning att göra enkel CRUD manuellt med SQL. Jag skulle vilja ha någon form av mini-ORM som bara hjälper till med CRUD, men inte gör allt annat som t.ex. JPA och Hibernate gör.
--
Det här meddelandet skickas till dig eftersom du prenumererar på gruppen scala-sverige i Google Groups.
Om du vill göra ett inlägg i den här gruppen skickar du e-post till scala-...@googlegroups.com.
Om du vill sluta prenumerera på den här gruppen skickar du e-post till scala-sverig...@googlegroups.com.
För fler alternativ, besök gruppen på http://groups.google.com/group/scala-sverige?hl=sv.
--
Rätta mig om jag har fel men brukar inte tex hibernate ha hbm-filer eller anotations där man talar om vilken kolumn som ska in i vilket fält?
Det är ett väldigt litet problem som borde ha en väldigt liten lösning. Som du skriver, en liten mini-orm, fast jag tycker select syntaxen är tillräckligt kompakt som mappningsspråk...
foo.Bar och baz.Bar clash, så du måste göra name-mangling
klassnamnet innefattar ju paketet. så fort man kortar så skär man hörn
Absolut, så länge inte äpplen och päron blandas, dvs fail early.
Jo givet att allt har samma namn är det sista att optimera bortselect * from MyType"select * from " + classOf[MyType].simpleNametypdef readQuery[T](implicit m:Manifest[T]) = "select * from "+m.erasure.simpleNameeller något. Dvs, man kan utogenerera defaultfrågor och o default inte funkar kan man göra sin mappning som en egen select...
2011/12/2 Joakim Ohlrogge <joakim....@agical.com>
CQRS + ES2011/12/1 Joakim Ohlrogge <joakim....@agical.com>
Då vet man vilket problem man försöker lösa med en ORM. Är en ORM det lättaste sättet att lösa det problemet och är man medveten om vilka andra problem man skaffar sig?
-----------------------------------------------------
Joakim Ohlrogge
Agical AB
Västerlånggatan 79, 2 tr
111 29 Stockholm, SWEDEN
Mobile: +46-708-754004
Blog: johlrogge.wordpress.com
Twitter: @johlrogge
E-mail: joakim....@agical.se
2011/12/1 Mikael Ståldal <mikael....@appearnetworks.com>2011/12/1 Joakim Ohlrogge <joakim....@agical.com>En orm löser som jag ser det två saker.1. Databasoberoende (nåja. Nästan )
Om man bygger en produkt som olika kunder använder med olika relationsdatabaser så är databasoberoende väldigt viktigt.1: problemet försvinner inte. Det ändrar form. Och handen på hjärtat. Hur ofta byter man egentligen?
--
Mikael Ståldal
Senior Software Engineer
Appear
Kista Science Tower
164 51 Kista
Sweden
Phone: + 46 (0)8 545 91 572
Mobile: + 46 (0)70 1479581
Email: mikael.staldal@appearnetworks.com
--
Det här meddelandet skickas till dig eftersom du prenumererar på gruppen scala-sverige i Google Groups.Om du vill göra ett inlägg i den här gruppen skickar du e-post till scala-...@googlegroups.com.
Om du vill sluta prenumerera på den här gruppen skickar du e-post till scala-sverig...@googlegroups.com.
För fler alternativ, besök gruppen på http://groups.google.com/group/scala-sverige?hl=sv.
--
Det här meddelandet skickas till dig eftersom du prenumererar på gruppen scala-sverige i Google Groups.
Om du vill göra ett inlägg i den här gruppen skickar du e-post till scala-...@googlegroups.com.
Om du vill sluta prenumerera på den här gruppen skickar du e-post till scala-sverig...@googlegroups.com.
För fler alternativ, besök gruppen på http://groups.google.com/group/scala-sverige?hl=sv.
--
Viktor Klang
Akka Tech Lead
Aldrig update :PMan kan argumentera för att insert och update är en helt annan best och kanske inte hanteras bäst av samma sak som hanterar read men... insert och update kan du väl också få i micromappern :) ... (känns som om den börjar ringas in av den delen av scalaquery som Henrik Johansson talade sig varm om tidigare i tråden)
äh, screw it, kör på map's som i clojure. Vad ska vi med objekt till egentligen... :)
--
Det här meddelandet skickas till dig eftersom du prenumererar på gruppen scala-sverige i Google Groups.
Om du vill göra ett inlägg i den här gruppen skickar du e-post till scala-...@googlegroups.com.
Om du vill sluta prenumerera på den här gruppen skickar du e-post till scala-sverig...@googlegroups.com.
För fler alternativ, besök gruppen på http://groups.google.com/group/scala-sverige?hl=sv.
man behöver inte ha det i API:et, man kan ha delete som management i datastoren
Men om man bara kör enkel CRUD varför blanda in en relationel databas?
Sen är det kanske symtom på något annat att ha så många ändringar i en update att man har svårt att få rätt på det.
Mvh,
John
Been there. Done that. Tänker inte sätt mig i den sitsen igen. De där sista 15% behöver ändå så mycket speciallösningar för att funka att det inte spelar någon roll att det sker i samma databas. Det lilla man möjligtvis underlättar äts mångfallt upp av komplexiteten i att underhålla ett antal villt skillda modeller och systemkomponenter i samma datstruktur.
Mvh,
John