PDA

Vollständige Version anzeigen : Wann ist Access am Ende ?


SebastianMüller
23.10.2003, 15:40
Hallo,

ich möchte eine neue Datenbank konzipieren und stelle mir vorab die Frage, ob das mit Access überhaupt auf Dauer realisierbar ist.

Ich habe einen csv-Import von ca. 7000 Datensätze á 50 Spalten. Diese csv soll importiert werden. Danach sollen daraus noch ca. 6-8 Untertabellen erstellt werden. Hinzu kommt, dass ein Großteil der Datensätze komplett (Feld für Feld) für Auswertungen durchsucht werden müssen. Das macht (7000 x 50) = 350.000 Felder bei einer Tabelle. Dauert bestimmt lange, oder?

Dieser Import und die Auswertung erfolgt in jedem Quartal, wobei die Anzahl der Datensätze pro Quartal um 1000 - 1500 Datensätze ansteigt.

Lohnt es sich das ganze in Access zu bauen, oder stoße ich da blad (in 1-3 Jahren) auf die Grenzen von Access? Laufzeitverhalten?

Alternativen?

Danke.

jmc
23.10.2003, 15:58
Hi Sebastian

m.E. ist diese Menge - inkl. der erwarteten Zunahme - noch kein Killerkriterium, vorausgesetzt dass !

Du schreibst von EINEM Import mit 50 Feldern, der dann in 6-8 Tabellen aufgeteilt wird = über den Daumen 8-10 Felder pro Tabelle. Auch das ist nicht die Welt, sondern liegt absolut im Rahmen des üblichen.
Wobei jetzt noch nicht gefragt ist, ob du da nicht normalisieren kannst/musst!
Nun kommt es einfach noch drauf an, dass du die Relationen zwischen den Tabellen richtig machst, aber wenn du aus einem Import in verschiedene Tabellen aufteilst, dann gibt es ja eigentlich nur in einer Tabelle ein Schlüsselfeld, das in den übrigen Tabellen Fremdschlüssel sein muss (oder ich sehe was falsch ..)
Wichtig ist auch noch, dass du dann entsprechende Indexe erstellst, schau dazu mal diesen (http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=106501) interessanten Beitrag an.

Was meinst du mit dem Suchen in 7000 * 50 Feldern. Man wird ja wohl nicht auf alle 50 Felder je ein Kriterium setzen?

Ich habe eine Anwendung, die aus wesentlich mehr Tabellen besteht.
Die Personaltabelle hat so gegen 30'000 Datensätze, dann gibt es abhängige Tabellen, welche zwischen 10' - 20'000 DS haben, eine mit rund 50'000. Die "Laufzeit" bei einer Suche ist absolut erträglich.

Wenn du später tatsächlich Probleme bekommen solltest, dann steht dir immer noch die Möglichkeit offen, die Tabellen z.b. auf einen SQL-Server oder MySQL (oder was es dannzumal geben wird ;) ) zu migrieren

Bärbel Ritzi
23.10.2003, 16:36
Hallo Sebastian,

ich würde das so versuchen, ich finde die Dimensionen für einen Import nicht gewaltig.

Außerdem kannst Du bei einem übermäßigen Ansteigen der Daten und der damit möglicherweise verbundenen Performanceprobleme in die skalierbaren SQL Server Produkte migrieren.

Gruß
Bärbel

SebastianMüller
24.10.2003, 07:19
Hallo,

vielen Dank für eure Antworten.

Ich werde das ganze jetzt mal beginnen.

@jmc:

In der Importdatei befinden sich ettliche Spalten, welche bereits in anderen Tabellen auch existieren. Zum Beispiel Kundennummer. Dann gibt es logischerweise eine Datei mit Kundennummern und Kundennamen. Nun muss jeder Datensatz kontrolliert werden, ob die Kundennummer bereits in der anderen Tabelle vorhanden ist. Wenn nein, muss die neue Kundennummer mit Kundenname angelegt werden. Das ganze muss laso 7000 mal mit Spalten wie Lieferantennummer, Objektnummer, Refi-Art, Bank-Art, Finanzierungsart, Branchennummer, VB-Nr. usw..
Und genau bei dieser großen Prozedur vermute ich Laufzeitprobleme. Oder sehe ich das zu gewaltig und es ist gar nicht so schlimm.

Tut mir ja leid, aber so etwas habe ich in Access noch nie gemacht.

Danke.

shaak
24.10.2003, 07:27
Also wir sind mitlerweile an die Grenzen gestossen

haben nun WWS Daten import begonnen und dort ist dann leider sense

die suche dauert da leider bis zu 3-4 min

Daten sätze derzeit 5,5 Mio.

aber denke das is die Ausnahme und hat auch all die Jahre gut funktioniert nu wird die DB halt ausgelagert auf nem sql server.

Die Umstellung ist ja auch ncith der riesen Aufwand.

Also sollte es mal eng werden bei dir kannst du immer noch den etwas kostspiliegern Schritt gehen und nen SQL server dahinterhängen.

jmc
24.10.2003, 13:34
Hallo Sebastian

OK - Excel hat ja typischerweise eine Zeile pro "Datensatz", eine Spalte davon ist die Kundennummer.
Wenn du nun das ganze importierst, dann hast du mal eine Tabelle 1:1 zum Excel, einfach als Access-Tabelle. (Man könnte auch das Excel statt importieren nur verlinken)

Dann hast du von den paar Tabellen, in welche du nun übertragen willst, EINE Haupttabelle, nehme an tblKunden, welche die Kundennummer, Kundenname etc. enthält.
Alle anderen Tabellen sind dann 1:1 oder 1:n mit dieser in Relation und haben die Kundennummer als Fremdschlüssel auf die tblKunden .. Richtig so ?
Nun muss jeder Datensatz kontrolliert werden, ob die Kundennummer bereits in der anderen Tabelle vorhanden ist. Wenn nein, muss die neue Kundennummer mit Kundenname angelegt werden
Als ersten Schritt musst du aus der Excel/Import-Tabelle die tblKunden mit den NEUEN Kundennummern ergänzen, das macht man mit einer Anfügeabfrage . Die macht das von alleine, es kommt einfach ne Meldung, dass so und soviele nicht angefügt werden, da schon vorhanden ... (wobei man die Meldung noch unterdrücken könnte)

Die Frage ist dann, was mit den bereits existierenden passiert. Entweder nichts - da ja schon vorhanden - oder
2. Schritt: ein Update der Felder aus dem Import, dazu macht man eine Aktualisierungsabfrage auf die tblKunden.

3. Schritt: die restlichen Tabellen werden analog behandelt, also auch jeweils eine Anfüge- und eine Aktualisierungsabfrage.
Da nun in tblKunden die Kundennummer vorhanden ist, sind die neuen auch kein Problem und beim Update sowieso nicht ...

Laufzeit: vermutlich beim 1. mal mit den 7000 etwas länger, da ja alles Insert's zu machen sind.
bei den weiteren Läufen mit 1000-1500 kommt's drauf an, wieviele neue es sind. Aber das läuft ja - wie du schreibst - nur alle 3 Monate einmal, also sollte das m.E. auch nicht das Thema sein.

Erfahrungswert: die 30'000 Personaldatensätze wurden immer vollständig updated - neue natürlich hinzugefügt - und das dauerte ca. 30 Minuten.
Der PC auf dem es lief, war nicht der allerschnellste.

Hoffe, mit diesen Zusatzinfo's und Gedanken geholfen zu haben. Falls erwünscht, kannst du mir mal die Spezifikationen zukommen lassen, dann kann ich dir schon beim optimieren helfen.

SebastianMüller
24.10.2003, 13:52
Hallo schweizer,

danke für die ausführlichen Infos.

Ja, beim importieren habe ich eine riesige Tabelle, wie du sagtest. Verlinken mit Excel geht nicht, da die csv vom UNIX-System erstellt wird und ich will die nicht noch extra in Excel importieren.

Deine Vermutung mit der tblKunden ist richtig. Es gibt eine "Haupttabelle" in der alle bekannten Kundennummern sind und dazu die Kundennamen.

Wenn du sagst, dass der Abgeleich mit dieser Tabelle und anderen ganz gut läuft, dann werde ich das jetzt mal probieren. Habe zwar noch nie eine Anfügeabfrage erstellt, aber das sollte doch nicht so schwer sein.

Den Import habe ich bereits realisiert. Auf Knopfdruck werden alle alten Daten der Tabelle "Vertragsdaten" gelöscht. Dann wird die csv in diese Tabelle eingefügt. Nun hat man den neusten Stand.
Jetzt muss es mit dem Abgleich weitergehen.
Das werde ich mal probieren.

Danke.

Hondo
24.10.2003, 14:29
Hallo Sebastian,
um noch auf deine ursprüngliche Frage einzugehe, ob oder wann Access am Ende ist. Es ist zu unterscheiden, ob Access als reines User-Frontend eingesetzt wird, und ob dahinter eine leistungsstarke Datenbank sitzt, oder ob auch das Backend Access ist.
Bei schlechtem Coding und großem Daten- und Transfervolumen ist man vor schlechter Performance nicht gefeit.
Eine Verbesserung kann der Einsatz von MySQL oder eines anderen SQL-Servers bringen. Besser ist auf jeden Fall ein sauberes Coding. Zu diesem Thema gibts 2 gute Links. Siehe http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=98081

Gruß Andreas

jmc
24.10.2003, 14:34
Hi Sebastian

sorry, hatte da irgendwie Excel im Kopf, wobei CSV ja auch mit Excel eingelesen werden kann und im Explorer sogar mit dem "X" angezeigt wird ... ;)

UND: auch ein CSV könnte man linken ! Aber wenn du's importierst ist das auch OK, dachte nur wegen dem unnötigen Ballast in der mdb ...

SebastianMüller
24.10.2003, 15:09
So, melde mich Montag nochmal.

Habe jetzt keine Lust mehr.

Schönes erholsames Wochenende euch.

SebastianMüller
27.10.2003, 07:18
Guten Morgen,

man war das kalt heute Früh.

Habe jetzt eine Anfügeanfrage fertig. Das geht ja einfacher als ich dachte.

Eine Frage noch:

Ich importiere doch eine csv. Diese hat auch Spaltenköpfe, z.B. "Lfd.-Nr.". Importiere ich diese csv manuell, dann wird aus "Lfd.-Nr." ein "Lfd-Nr" also ohne ".". MAche ich es mit TransferText, dann wird ein "Lfd#-Nr#" draus. Das gefällt mir nicht, wie kann ich das vor dem import ändern, damit die Spaltenköpfe der Zieltabelle mit dem Import übereinstimmen? Ich brauche also "Lfd-Nr".

Danke.

SebastianMüller
27.10.2003, 07:27
Hallo nochmal,

wie kann ich in der Anfügeabfrage das Kriterium eingeben, dass nur dann die neue Kundennummer eingefügt werden soll, wenn sie noch nicht existiert.

???

INSERT INTO tblKunden ( [Kunden-Nr], Leasingnehmer ) SELECT tblVertragsdaten.[Kunden-Nr], tblVertragsdaten.Leasingnehmer ...

und nun?

... , AS [Kunden-Nr] <> tblVertragsdaten.[Kunden-Nr] FROM tblVertragsdaten

oder so ähnlich?

Ich habe keine Ahnung.

jmc
27.10.2003, 07:34
Hallo Sebastian

du bist ja eigentlich nicht mehr ganz neu im Forum und solltest wissen, dass man in einem Thread nur eine Frage stellt ...

Unter dem Titel "Wann ist Access am Ende" vermutet wohl keiner eine Frage zum csv-Import ... auch wenn man deinen ersten Beitrag liest, klickt vermutlich mancher weg.

Schreib doch einfach deine Frage nochmals in einen neuen Beitrag !

Hondo
27.10.2003, 07:35
Hallo Sebastian,
du musst natürlich vorher prüfen, ob die Nummer schon vorhanden ist.
Das geht nicht in der gleichen Abfrage - was auch sinnlos wäre, da keine Fehlerbehandlung möglich.
Das kannst du mit einem Recordset machen, oder mit Dlookup().
Aber noch besser ist ein System, das die Nummer automatisch vergibt, in dem z.B. die größte Nummer gesucht wird und dann diese um 1 erhöht wird. Dazu gibts zig Beispiele hier im Forum, einfach mal suchen.

Gruß Andreas

SebastianMüller
27.10.2003, 07:35
Hast ja recht.

Danke.