Denne
Here to stay
|
Hey Ich habe ein altes Projekt ausgekramt und möchte weiter daran arbeiten bzw es erweitern und stecke momentan in der "Planungsphase" Konkret geht es um ein Programm, welches Filme und Serien verwaltet. In der ursprünglichen Form wurden die Filme in einer ArrayList mit abstraktem Datentyp gespeichert und zum speichern einfach in eine Datei exportiert und beim Start des Programms aus dieser importiert. Klappt alles wunderbar, auch mit paar tausend Titeln. Nun meine Frage, ob es sich lohnt, alles in einer Datenbank abzuspeichern oder ob es einfach overkill ist. Performance-mäßig lief alles pipifein mit der bisherigen Methode. Falls alles über eine DB laufen wird, wäre meine Frage, wie es dann genau ausschauen soll. Beim Start alles in eine ArrayList importieren, darauf arbeiten und beim Beenden des Programms einfach in die DB exportieren oder jede atomare Operation direkt auf der DB ausführen, was aber unter Umständen anstrengend werden könnte, wenn ich es mir so vorstelle? tia Denne
|
that
Hoffnungsloser Optimist
|
Wenn du weniger als ca. 100000 Filme und Serien verwalten willst und das Ding nicht multiplayeruserfähig sein soll, würde ich mir den Aufwand mit der Datenbank sparen und bei Textdateien bleiben.
|
pong
Addicted
|
Beim Start alles in eine ArrayList importieren, darauf arbeiten und beim Beenden des Programms einfach in die DB exportieren Noch besser du entlädst alle Tabelle auf einen sequentiellen File, liest sie im Programm ein, schreibst es bei Programmende wieder raus und lädst es dann gleich wieder rein. Sorry, aber für dein Vorhaben ein "echtes" DBMS zu nutzen, halte ich für stark übertrieben. Entweder freundest mit XML an oder nimmst ein SQLlite her. Selbst wenn die Nettodaten MB Größe annehmen, täte ich nie auf den Sinn kommen eine andere Datenquelle zu wählen.
|
Denne
Here to stay
|
Ja, war auch meine Vermutung, dass es "leicht" übertrieben ist. Filme/Serien dürften es atm ca 2000 sein, wächst natürlich ständig, aber außerordentlich viele Datensätze dürften es wohl nicht werden Ich bin halt deswegen drauf gekommen, weil viele Sachen sehr komfortabel gewesen wären und das Einsatzgebiet einfach dazu passt. Als DB hätte ich sowas wie HSQLDB oder Ähnliches in Betracht gezogen, kein MySQL etc Dann bleib ich wohl bei meinen Textdateien, thx fürs feedback
Bearbeitet von Denne am 08.10.2011, 17:32
|
pong
Addicted
|
Wo genau wärest mit einer relationen Datenbank besser drann als mit einer hierachischen, in deinem Fall?
Weil aus meiner Sicht ist das ganze Werk in einer Hierachie sehr einfach abzubilden.
Art (Serie / Film) - Titel -- Teil --- Format, Sonstige Infos
fertig.
Machs nicht komplizierter als es ist.
|
Denne
Here to stay
|
Hätte an mehreren Tables gedacht, eine mit den ganzen Ratings (von mehreren Seiten), eine mit den Infos (Titel, Erscheinungsjahr etc), eine mit den Codec-Eigenschaften etc pp und eben als Primary-Key eine Film-ID. Das wäre glaub meine grobe Vorstellung gewesen, wenn ich es mit einer rationalen Datenbank hätte managen müssen. So ists halt eine (oder mehrere) ArrayList mit abstraktem Datentyp (Serie bzw Film), bei welchem der Datentyp halt alle Attribute enthält, funktioniert imho genau so gut. Aber das war meine grobe Vorstellung
|
pong
Addicted
|
Hätte an mehreren Tables gedacht, eine mit den ganzen Ratings (von mehreren Seiten), eine mit den Infos (Titel, Erscheinungsjahr etc), eine mit den Codec-Eigenschaften etc pp und eben als Primary-Key eine Film-ID. Das wäre glaub meine grobe Vorstellung gewesen, wenn ich es mit einer rationalen Datenbank hätte managen müssen. Klingt nett, aber der Overhead ist enorm. Bedenke, dass selbst die 1. NF etwas ist, nur am Papier immer gut ausschaut. Aus meiner Sicht, bist mit deiner Lösung besser drann. pong
|
DKCH
Administrator ...
|
Klingt nett, aber der Overhead ist enorm. Bedenke, dass selbst die 1. NF etwas ist, nur am Papier immer gut ausschaut. Aus meiner Sicht, bist mit deiner Lösung besser drann. die ERSTE normalform? natürlich hängt vom einsatzzweck ab, aber so generell würd ich mich das nicht behaupten traun...
|
Denne
Here to stay
|
das einzige, was mich stört ist einfach, dass alles im cache ist und das natürlich auch platz verbraucht (was nur relavant ist, wenn man ungewöhnlich viele filme/serien) hat. außerdem find ich es mit dem abspeichern nicht so ganz elegant (alles in textdateien), funktionieren würds vermutlich ohne probleme.
von der performance ists auch kein problem: 100.000 filme sortieren dauert 0,3 sec mit dem natural mergesort, was okay ist. erst bei 300.000 filme knackts die 1sec marke.
@DKCH: ja, mit 1.NF ist die erste normalform gemeint.
|
Crash Override
BOfH
|
Wenn du es mit SQLITE machst, könntest du später wenn das Projekt gewachsen ist, einfach einen anderen Datenbanktreiber einbinden und andere Datenbanken nutzen. Das wäre meine Wahl. Allerdings backe ich auch schon sehr kleine Sachen in echte Datenbanken, da ich es in der Programmierung gelernt habe nur Datenbanken zu nutzen, ausser für größere Binärdaten, die nur in der Datenbank referenziert werden.
|
DKCH
Administrator ...
|
@DKCH: ja, mit 1.NF ist die erste normalform gemeint. das hab ich schon noch verstanden, danke aber warum gerade die 1. die böse sein soll... bis zur 3. hät ich das eigentlich als nicht wirklich zur diskussion stehend angesehen
|
semteX
begehrt die rostschaufel
|
du hast also im moment eine Array List mit Filmen. Dann sollen irgendwann Rating dazu, dann irgendwann 1 .. N Trailer, Kathegorien, ... und irgendwann hast dann so einen vogel den ganzen ******* synchron zu halten, dass du am rad drehst. weiters würd mich interessiern wie du den binary blob über Updates von Klassen rettest. nach meinem gefühl müsste dir, wenn du den standard serialisierer verwendest, alles um die ohren fliegen. solltest so klein bleiben, dann ists eh wurscht. ansonsten würd ich eher gscheit viel früher auf SQLITE (da gehts, solangst single user bist, echt um nix) wechseln (im blödesten fall lernst mit datenbanken umzugehen). Und wennst ganz lustig bist, dann haust noch an OR Mapper oben drauf (und hast probleme von denen du nie dachtest, dass du sie mal haben wirst )
|
Denne
Here to stay
|
@ DKCH: ah okay, my bad. aber ich gebe dir recht, ich fands auch erst ab der 4NF zum k..... in der Uni @ Crash Override: Wir haben für unsere lächerlichen Projekte in der Uni immer nur ADT's (abstrakte Datentypen) verwendet, habe letztes Semester eine Einführungsveranstaltung in SQL gehabt Wenn ich es aber richtige sehe, ist SQLITE ja für C, glaube HSQLDB bzw H2 wären das Pendant dazu (embedded DB's), was auch meine Wahl gewesen wäre. Rest wäre wirklich absolut absurd und selbst mir zu aufwändig Bin immer noch am schwanken, aber vermutlich werd ich's mit der Datenbank probieren, reizt mich einfach zu sehr edit: @ semteX: Habe einen abstrakten Datentyp "Movie", welche Attribute wie name, filename, imdb-rating, genre etc hat und eine ArrayList<Movie>, welche die ganzen Movie-Objekte hält. Klappt alles wunderbar, ist halt absolut statisch... sobalds dynamischer werden sollte, würd mir vermutlich wirklich alles um die ohren fliegen.
Bearbeitet von Denne am 12.10.2011, 22:12
|
UncleFucka
-
|
Klappt alles wunderbar, ist halt absolut statisch... sobalds dynamischer werden sollte, würd mir vermutlich wirklich alles um die ohren fliegen. du müsstest halt deine de/serialisierer methoden ein bissl failsafe bauen und zb defaultwerte einführen. dann ist das alles kein problem mehr. so schlimm ists auch nicht. könntest dich aber auch ein bissl mit xml serialisierern auseinandersetzen und jeden film als ein xml abspeichern. dann ist das ganze ein bisschen kompatibler und einfacher anzuzapfen als binär. es wird halt mehr platz brauchen.. trailer, bilder und so würd ich sowieso nur verlinken auf files im dateisystem und nicht als blobs oder sowas reinschmeissen. das wär dämlich. aber ja, ich würde alleine aus nerdyness eine DB nehmen . aber wenn dann gscheid und die free version von oracle
|
that
Hoffnungsloser Optimist
|
aber wenn dann gscheid und die free version von oracle Dann müssen aber unbedingt noch irgendwo Webservices vorkommen. Und natürlich mindestens J2EE.
|