Permalänk
Medlem

Custom Databas

Hej,

En polare behövde en lättanvänd databas till sitt C# program som han håller på att programmera och han undrade lite vad han skulle välja bland.
Jag tyckte det kunde vara en rolig idé att skapa en egen databashanterare, som är simpel och lätt att implementera.

Jag blev nu färdig med en beta, som fungerar klockrent i hans program. Skapade också ett administrationsverktyg till databasen.

Det är ett klassbibliotek (.dll). Den sköter allt. Sparar, laddar, övervakar och skapar databaser som jag kallar .udb.

Gjorde en databas (Se bilderna nedan) i administrationsverktyget, och lade till ca. 100 000 entries i 2 olika Tables (Jag kallar tables för Sub Bases, ville bara ha något annorlunda ^^).

Filen blir med 100 000 entries och 2 tables lite mindre än 5 Mb stor (4900kb). Då innehåller varje entry 5 strings ("Name","DOB","Latest Book","Wife","Adress").

Databasen tar då ca. 1.5 sekunder att ladda.

Anledningen till tråden är väl egentligen bara att dela med mig av detta, och samtidigt fråga om någon gjort något liknande innan, och har lite tips på vad som kan komma att bli framtida problem).

Vill någon ta del av DLL filen så får ni gärna säga till, isåfall kan jag länka den. Har ingen vidare dokumentation ännu...men funktionerna är rätt självförklarande, t.ex AddNewDatabaseItem, RemoveDatabaseItem, CreateNewDatabase osv..

Ställ gärna frågor eller kom med förslag.

Lite kod från klassbiblioteket

Administrationsverktyget laddar databasen

Databasfilen

Data tabellen. 2 Sek. laddningstid

Här lägger jag till 15000 entries i tabellen "Books". Tar ca. 5-7 sekunder.

Permalänk
Medlem

Hej!

Kul projekt och bra jobbat!

Ett problem som skulle kunna uppstå framöver är att bibehålla databasens integritet. Har du flera användare som jobbar mot databasen samtidigt så kommer du behöva låsa fält vid förändringar för att inte andra ska kunna ändra samtidigt. Det lättaste är väl att låsa hela filen, men med många användare så skulle det bli ohållbart segt.

Där har du nåt att bita i.

Permalänk
Medlem
Skrivet av haschel:

Hej!

Kul projekt och bra jobbat!

Ett problem som skulle kunna uppstå framöver är att bibehålla databasens integritet. Har du flera användare som jobbar mot databasen samtidigt så kommer du behöva låsa fält vid förändringar för att inte andra ska kunna ändra samtidigt. Det lättaste är väl att låsa hela filen, men med många användare så skulle det bli ohållbart segt.

Där har du nåt att bita i.

Hehe ja, just nu så går det att ha databasen öppen i flera administrations verktyg samtidigt då den håller reda på databasen och kollar efter ändringar, och när en ändring är gjord så läser den in databasen på nytt, fungerar mycket bra. Däremot jobbar jag just nu på att försöka låsa fälten som någon ändrar i, men det är grymt klurigt!

Permalänk
Medlem

Jättekul med sådana här projekt. För att benchmarka så tycker jag du borde implementera samma test med t.ex. sqlite som backend (som traditionell databas) och kanske någon nosql/document-storage backend dels för att jämföra databasstorleken men också den prestanda som du visar på. Vore bra om du släptte kod under rimlig licens på github, mycket bra sätt att få kommentarer och lite draghjälp

Keep up!

Ps. Uppsala Universitet brukar ha en hel del kurser med material inom databasteknik, allt i från traditionella databaser DBMS till DSMS (Data Stream Management System) för strömmande data och frågor...
Ds

Visa signatur

weeeee

Permalänk
Medlem

Du borde verkligen inte kalla tabeller för SubBase. Ser ingen poäng med det alls, speciellt eftersom du är supertydlig med att det är en "table" som det avser. Det blir extra konstigt då jag tolkar SubBase som något som ärver från Base eller ligger "under" Base.

Jag har svårt att se vad det är för typ av databas. Relationsdatabas? Kan man köra querys (SQL) mot den eller utgår man från en SubBase och kallar på rubbet?

Eventuella framtida problem
ACID, Transaktionsstöd med olika isoleringsnivåer, Flera användare, Detaljerad lagring av data, Constraints, Indexering, Cache.

Att kolla när filen ändras är inte en rolig väg att gå. Om du vill ha seriös fleranvändarscenario så måste du gå på anslutningar och låta en service av något slag snurra i bakgrunden som håller koll på användarna.

Jag hade nog hellre sett en wrapper och admin till en befintlig databas, exempelvis SQLite. Att göra en egen databasmotor är hardcore om det ska bli seriöst.

Jag sågar inte ditt projekt. Det jag skriver får tas med en nypa salt och betraktas som iakttagelser och önskemål i bästa fall.

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?