Avatar billede trer Nybegynder
16. august 2004 - 15:16 Der er 4 kommentarer og
1 løsning

Kode til SQL Engine

Lidt baggrund; Mit hobbyprojekt p.t. er en parser til filer med slægtsinformationer lagret efter den internationale GEDCOM standard.  Data består i nogle få rådata med masser af mange-til-mange relationer.

Målet er, at parseren skal blive til en ODBC eller OLE DB driver med begrænset SQL support (kun læsninger - dvs. SELECT med inner/outer joins, where betingelser etc).

Selve fortolkningen af GEDCOM filen og opsplitning i ca. 20 "tabeller"  (objekter nedarvet fra TList) sker i parseren, så SQL motoren skal kunne hægtes på disse.

jeg har fundet et par forskellige sql engines på Torrys og Delphi Super Page - men ikke nogen der kan håndtere joins over 3 eller flere tabeller med acceptabel hastighed.

Jeg har også forsøgt med at embedde SQLite - dens join motor er rigeligt hurtig nok, men den er for langsom til at oprette records når parseren kører.

En GEDCOM fil med nogle få tusinde personers indbyrdes familieforhold bliver til ca. 1 million records hvad min parser klarer på nogle få hundrede millisekunder - mens SQLites recordoprettelse tager 30-40 sekunder...

At anvende Paradox, MySQL, Oracle, MsSQL eller Access er ikke brugbart ifht at lave en ODBC / OLE DB driver til GEDCOM formatet - driveren skal være "stand-alone" .

Så det jeg søger er kildekoden til en rimeligt effektiv SQL Motor (eller blot select-delen af en) som understøtter selects med joins og gerne group by, distinct og aggregeringsfunktioner.

Kildekolden kan være i alt fra Delphi 1 til 6 - og skal være gratis.

Nogen der har noget liggende, evt. et link til noget, et skoleprojekt eller et eksempel fra en bog?

Vh
Troels
Avatar billede trer Nybegynder
19. august 2004 - 14:15 #1
Ingen svar - så jeg trækker spørgsmålet tilbage p.t.
Avatar billede arne_v Ekspert
17. oktober 2004 - 23:31 #2
Lidt sent men hvad pokker.

Jeg tror ikke at gode gratis SQL engines er nemme at finde.

Så her er et alternativt forslag.

Brug MySQL og HEAP tabeller.

Lav noget initialiserings kode som læser GEDCOM filerne og gemmer i MySQL HEAP
tabeller.

Så joiner du på livet løs med MySQL driver (og med 4.1.x kan du
sågar bruge subselects).

Performance burde være god, da HEAP tabeller kun er i memory.

SQL supporten burde være OK.

Der er lidt restriktioner på HEAP tabeller men ikke noget urimeligt.

Læs selv http://dev.mysql.com/doc/mysql/en/HEAP.html
Avatar billede trer Nybegynder
18. oktober 2004 - 20:26 #3
Hej Arne

Tak for forslaget - men MySQL løsningen har samme problem som SQLite, nemlig indsættelsen i databasen efter at jeg par parset filen.

P.t. kigger jeg på at skrive min egen SQL engine, den vil blive simpel og primitiv men forhåbentlig hurtig nok.

Ellers - thja, en nem løsning er, at jeg simpelthen laver det sådan at man giver en ADO connection string til min parser, og så kan man frit forbinde til en valgfri database. Så bliver min parser desværre kun en konverter - men... det må så være...

Mvh
Troels
Avatar billede arne_v Ekspert
18. oktober 2004 - 20:30 #4
Hvorfor skulle det tage lige så lang tid for MySQL at gemme records
i memory som for SQLite at gemme records på disk ??
Avatar billede trer Nybegynder
18. oktober 2004 - 21:19 #5
Problemet er lidt den måde data opbygges i parseren (faktisk en statemachine) - jeg ender med data i en memory struktur som skal overføres til databasen som 20 tabeller.

Jeg har haft leget med en kommerciel database motor med in-memory tabeller beregnet til den slags (og uden MySQL's begrænsninger) og selv den havde lidt problemer mht at indsætte i en hastighed der passede mig.

Dernæst - som jeg skrev - mit mål var/er egentligt at skrive en ODBC driver og i forhold til det er MySQL (eller enhver anden "rigtig" database) ikke anvendelig. Så kan jeg nemlig lige så godt blot nøjes med en konverter der er databaseuafhængig.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester