Klar til iPhone: Danskudviklet database er målrettet mobiltelefoner og kører uden SQL

Tidligere Nokia-ansatte står bag virksomheden Realm, som netop har lanceret en database, der betjenes uden SQL og er målrettet mobiltelefoner. Andre database-løsninger er forældede og uegnede til brug på den slags enheder, lyder det fra den danske leder af Realms udviklingsafdeling i København.

Realm hedder en netop lanceret database-løsning, der er optimeret til brug i mobiltelefoner, og som er kodet i c++. I første omgang er softwaren klar til Apples iOS, men en Android-udgave er også på vej. Det er Alexander Stigsen og Bjarne Christiansen der har grundlagt firmaet bag databasen, det hedder også Realm. De er tidligere ansatte fra Nokias danske udviklingsafdeling, som det i april 2011 blev meldt ud, skulle lukke.

Læs også: Nokia lukker udviklingsafdeling i Danmark - 1000 udviklere fyres

Realm har taget tre år at udvikle, og databasen er tænkt som en effektiv måde at gemme og behandle data i forbindelse med apps. Som det nok vil være flere Version2-læsere bekendt, så findes der jo allerede et hav af databaser, så hvad er pointen med endnu én, vil nogen måske spørge.

Men ifølge Brian Munkholm, leder af Realms 7-mand store udviklingsafdeling i København, så har de eksisterende databaser mange år på bagen og udnytter derfor ikke de muligheder og faciliteter, der er i moderne hardware og programmeringssprog.

»De eksisterende databaser har ikke været designet til de behov, vi har i dag, hvor tingene skal være multitrådede og cpu'erne har mange kerner og enheder, som mobiltelefoner, har forholdsvis meget hukommelse. Og så har de heller ikke været designet til de cpu-hastigheder, vi har i dag,« siger han.

Realms database-teknologi fokuserer blandt andet på at minimere objekter, så de fylder så lidt i hukommelsen, som muligt. Det betyder, at der dels er plads til at have mere data i hukommelsen ad gangen, mens det samtidigt bliver hurtigere at finde frem til det rigtige objekt, fortæller Brian Munkholm.

Udover arbejde med at mindske memory-footprintet for databaseposterne, så fungerer Realm også rent teknisk noget anderledes end flere klassiske databaser.

Arbejder ikke på kopi af data

»Forskellen på almindelige databaser og vores er, at når du arbejder med datastrukturen i gængse databaser, får du en kopi af et datasæt, som ligger i hukommelsen. Det kan være upraktisk, fordi det fylder op, og så er det langsomt at søge i. I vores database arbejder man direkte på dataene, og kombineret med vores søgeteknologi bliver søgninger væsentlig hurtigere,« siger Brian Munkholm.

Og derudover skal en programmør ikke anvende det gængse databasesprog SQL for at kommunikere med Realm.

»Som programmør skal man ofte sende tekststrenge ned til en database i SQL, og så får man nogle kopier tilbage. Vi har en datastruktur, som er lige så let at bruge i programmeringssproget, som den indbyggede datastruktur, hvor man gemmer attributter.«

Følgende er et eksempel fra Realms hjemmeside, der viser hvordan et almindeligt objekt kan lagre data i Realm-databasen i Apples programmeringssprog Swift. Det sker ved at extende et Realm-objekt.

class Dog: RLMObject {
var name = ""
var age = 0
}
 
let mydog = Dog()
 
mydog.name = "Rex"
println("name of dog: (mydog.name)")

Dataene kan hentes igen på følgende måde:

let r = Dog.objectsWhere("age > 8")
 
let r2 = r.objectsWhere("name contains 'rex'")

Ovenstående måde at interagere med databasen på er ifølge Brian Munkholm meget mere naturlig og lettere at overskue for programmøren end gængse SQL-alternativer. Der er dog også andre databasemiljøer, der tillader interaktion med databasen uden brug af SQL, men via et objektorienteret abstraktionslag, som det, Realm anvender. Men de systemer er for langsomme, mener Brian Munkholm, som kalder de eksisterende løsninger for lappeløsninger, der er bygget oven på et utidssvarende fundament..

»Abstraktionslaget giver normalt et kæmpe performance hit, det gør det ikke hos os,« siger han.

Hvad med SQLite?

En særdeles udbredt database, der også henvender sig til enkeltstående softwaremiljøer, er SQLite.

»Det er en rigtig fin database. Men den har mange år på bagen, og så er den bygget til relationer,« siger Brian Munkholm.

Realm understøtter flere forskellige databasestrukturer inden for en enkelt database, fortæller Brian Munkholm. Det vil sige key-value, relationer og graph. Sidstnævnte bruges blandt i forbindelse med sociale netværk til at modellere de mange relationer, der kan være mellem eksempelvis Facebook-venner på kryds og tværs.

»Der er jo en masse forbindelser og knudepunkter. Man kan godt lave det i en relationel database, men det bliver langsomt, hvis der skal søges i det,« siger Brian Munkholm.

Ḱan man også bruge jeres database på eksempelvis en webserver?

»Ja i teorien. Men det har ikke været det, der har været målsætningen for den første release. Vi har fokuseret på mobiltelefoner, for der er jo ikke nogen virksomhed med respekt for sig selv, der ikke siger mobile first,« siger Brian Munkholm.

Er lokal datalagring- og behandling på en mobiltelefon overhovedet så vigtig, når der er cloud tjenester overalt, som data kan sendes til?

»Det er vigtigt at apps også fungerer, når telefonen er offline. Eksempelvis hvis man er ude at rejse, så er det jo rart, at kortet på telefonen stadig fungerer. Og så skal vi udnytte den store datakraft, der ligger på de mange mobiltelefoner i stedet for bare at sende data ubehandlet til en server. Telefonen kan lige så godt selv databehandle, så serveren ikke bliver bombarderet med forespørgsler, som sender den i knæ,« siger Brian Munkholm.

Realm koster ikke noget, og flere dele af den er open source. Selve kernen er ikke helt endnu, men det bliver den snart, lover Brian Munkholm. Der er også en server-backend på vej, som den lokale database på telefonen, kan koble op til.

Udgangspunktet for forretningsmodellen er tilpasning og support til virksomheder, der vil betale for det.

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Kommentarer (20)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Jens-Peter Vraa Jensen

Jeg kender Bjarne Christiansen som har stiftet Realm (tidligere TightDB) og da jeg første gang hørte om projektet, vidste jeg at de havde fundet et genialt "hul" i forhold til datalagring.

Det er ekstremt hurtigt, enkelt og rigtigt lavet fra starten og med et minimalt footprint af både kode og de data, der arbejdes med.

Stort tillykke med at de nu, efter 3 lange år, endelig har lanceret og held og lykke fremadrettet.

Casper Paulsen

Er det ikke lidt hårdt sagt?

Uanset, så har jeg svært ved at se hvad man vindere i det store og hele. Af hvad jeg kan læse mig frem til, så fungere de objekter man har adgang til som proxies til data filen, alt data er en stream. Det er så fint nok, men medmindre man vil bruge ens data objekter som domæne objekter, så har jeg svært at se hvad man vindere over en SQLite database, da man jo lave en mapping til domænet uanset. Hvis man ikke gør det, kan man jo bare bruge en ORM. Dog kan jeg se en interessant brug af et observer pattern, hvis det er muligt.

Når det er sagt, så tillykke med at I har fået noget op at stå, det er flot uanset, hvad andre synes.

Janus Knudsen

Den dybere tanke er vel at kunne persistere sine objekter og hente dem ud igen uden at tænke på de- / serialisering.

Om Sqlite gemmer 5 gange langsommere er for så vidt ligegyldigt, vi snakker jo syntax og nemhed. Forøvrigt er relationel data vel som sådan ikke noget man opbevarer på en tlf ;)

Janus Knudsen
Casper Poulsen

"Uanset, så har jeg svært ved at se hvad man vindere i det store og hele. Af hvad jeg kan læse mig frem til, så fungere de objekter man har adgang til som proxies til data filen, alt data er en stream. Det er så fint nok, men medmindre man vil bruge ens data objekter som domæne objekter, så har jeg svært at se hvad man vindere over en SQLite database, da man jo lave en mapping til domænet uanset. Hvis man ikke gør det, kan man jo bare bruge en ORM. Dog kan jeg se en interessant brug af et observer pattern, hvis det er muligt."

Jeg tror de fleste udviklere idag anvender en form for objekter, enten databærende eller domæne. Fælles for dem begge er at der kan være aggregat roots, begge giver umiddelbart god mening at kunne persistere uden at sidde og skulle fedte rundt med objektgrafer og en ORM, synes du ik?

Brian Munkholm

Det kan jeg godt forstå du undrer dig over. Den underliggende kerne er da også lavet med method chaining query API. Vores første version til Objective-C havde også dette, men det ser ikke særligt fikst ud i Objective-C. Et andet feedback var også at mange er vandt til NSPredicate og det derfor er nemmere at skifte over til Realm, hvis den del er den samme.
Med Swift kunne man sagtens overveje at lave det chained i stedet. Det vil se fint ud og der er ikke samme "legacy" at tage hensyn til.
Man kunne også sagtens have begge dele, men det har vi undladt i starten for at gøre det simpelt.

Brian Munkholm

Vi skynder os så meget som muligt og det bliver inden der kommer sne... Der er overvældende stor interesse for det! Vi vil gerne have API'et helt i vinkel før release. Men skulle der være nogle som kunne tænke sig at give feedback på en tidlig version, hører jeg gerne fra jer.

Brian Munkholm

Men det vigtige er nok nærmere hastighed, multi-threading effektivitet og storage effektivitet, end APIet?


Du har da ret i at de faktorer er meget vigtige, men vores ambition er også et API der gør det super nemt og ikke mindst hurtigt at udvikle til. Vi får temmelig meget positiv feedback (se tweets på @realm) på netop hvor nemt det er at kode til, og at folk nemt får fjernet 100-vis linier CoreData kode. Når der så samtidig er et godt performance forspring så behøver man ikke bruge måneder på at optimere CoreData (som vi også hører er meget normalt). Så performance og nemt API skulle gerne give væsentlig hurtigere udviklingstid, og dermed sparet $.
Mem hvis du synes der er dele af API'et der kan gøres endnu bedre er vi lutter ører!

Log ind eller Opret konto for at kommentere