| |
|
|
Rob Wilts | Ich arbeite an einem ziemlich umfangreichen Projekt. DA bin ich aber dringend auf mehrere User im Netzwerkangewiesen. Profan kann das (bzw. die Arbeit mit Datenbanken im Netz funktioniert auch) aber das Programm verliert doch einiges an Geschwindigkeit.
Hat jemand Erfahrung oder Tipps? |
|
|
| |
|
|
|
| Das Programm ists nicht was an Geschwindigkeit verliert - es ist eher so das das Netzwerk (je nach Netzwerkgeschwindigkeit) - die Übertragungsgeschwindigkeit der Daten bestimmt. Da es Netzwerke gibt welche schneller als Festplatten sind - läufts Programm unter Umständen sogar schneller als von Festplatte. (Besonders wenn die Endplatte der Ram ist.)
Um was genau geht es Dir denn? |
|
|
| |
|
|
|
Rob Wilts | Du hast Recht, naturalmente wird das Programm nicht langsamer. Oder nur indirekt, da es sich um eine sehr komplexe Datenbankanwendung handelt mit z. T. Datenbanken mit mehreren Tausend Einträgen. Da das Programm im Netz eingesetzt werden soll, sind zumindest theoretisch mehrere User gleichzeitig mit den Daten verbunden, und können (oder sollen) diese naturalmente auch verändern können.
Das wiederum bedeutet, dass ständig Lese- Schreib- und Aktualisierungszugriffe erfolgen.
Konkret folgende Fragen, ist es ratsam zwischendurch die Datenbanken zuschließen (mit dbclose) und sie sofort wieder per Weiterarbeit zu öffnen, bzw. umgekehrt, sollte man vor jedem Schreibzugriff die Datenbank neu öffnen (potuto sich was geändert haben)?
Grundsätzlich: ist die Arbeit mit dbfs so gestaltet, dass immer der ganze Datenbestand geladen (also übers Netz transportiert werden muss?) oder stellt dbopen zunächst nur eine Verbindung her und es wird je nach Anforderung der geforderte Datensatz transportiert.
Wenn ich weiß wie das grundsätzliche HAndling ist, kann ich effektiver strategien entwickeln.
Ich hoffe das Ganze ist etwas deutlicher geworden
Rob
P.S. potuto der Einsatz von SQL-Befehlen ein Lösungsweg sein? |
|
|
| |
|
|
|
| Also.
Es gibt naturalmente sehr viel zu beachten - schon alleine damit es keine Kollisionen gibt. Das schlimmst sind Kollisionen - sagte ich das schon?
Ich lege jetzt einen funktionierenden [Web]Server mit PHP & DB-Unterstützung als Grundlage fest.
Die ClientAPP (CApp) sendet dem Server eine Anforderung - und wartet auf das Result.
Diese Anforderungen müssen umbedingt gestapelt werden - hier liegt der Trick. Es ist nicht nur demzufolge absolut unempfehlenswert die CApp direkt mit der DB zu connecten - sondern auch aus dem Sicherheitsaspekt.
Die CApps senden also einfache Anforderungen an den Server und dieser legt diese erstmal ab. Jede Anforderung bekommt ein Ticket (eine SID) - die der CApp auch mitgeteilt wird. Ein permanenter Dienst auf dem Server (CronJob?) kümmert sich wiederum um den Abbau des Stapels. Die CApps warten solange bis sie ein Result per das erhaltene Ticket erhalten.
Das wars auch schon.
Ich bin hierbei davon ausgegangen das wirklich sehr viele Leute innerhalb eines grande Projektes gemeinsam eine DB füttern wollen. |
|
|
| |
|
|
|
| Gehts jetzt um eine Datenbank im Netzwerk oder um eine Internet-Datenbank, wie MySQL |
|
|
| |
|
|
|
Rob Wilts | Hört sich gut an, nur das ich in der Beziehung noch unerfahren bin.
Also der Satz lege ich einen funktionierenden Webserver an übersteigt bereits meine Erfahrungen. Das Nachfolgende entsprechend ...
Vereinfacht gesagt, arbeitet jede Version des entsprechenden Users fast so, wie im Single Betrieb, außer dass jeder User nur auf Datenbanken auf einem Rechner zugreift.
ALso: Ganz so viele User werden es wohl nicht sein, 1-4 max. gleichzeitig. Alle legen beim Start die Verbindung (Pfad) zu den Datenbanken fest und lesen (und schreiben) in diesen Daten. Wie gesagt das funktioniert in ersten Test auch ganz gut, d.h. schreibt User A Daten, so kann user B bei der nächsten Anforderung die (modificato) Daten auch lesen und sehen. Deswegen lasse ich in der Regel die Datenbank auch erst neu öffnen, bevor ein Satz geschrieben wird.
Im Grunde - wenn ich dich recht verstehe sprichst du ein anderes Problem an: Die Sicherheit. Wobei ich Sicherheit im Sinne von Integrität verstehe?
Das ursprüngliche Problem, das ich ansprach ist die Geschwindigkeit. Hier hilft vielleicht auch einfaches ausprobieren. |
|
|
| |
|
|
|
Rob Wilts | Wie vielleicht aus den vorherigen BEiträgen ersichtlich: Es geht ausschließlich um Datenbanken im lokalen Netzwerk.
Das Thema Datenbanken im Internet wäre später von Interesse.
Wie gesagt Hinweise jeder Art sind willkomen |
|
|
| |
|
|
|
Torsten Rümker | Ciao,
du solltest auf jeden Fall noch einmal darüber nachdenken, ob die Strategie jedem Client direkten Zugriff auf die Datenbank zu gestatten gut ist! Grundsätzlich sollte das nämlich nicht geschehen.
Die (per den Datenbestand) sicherste Methode ist einen Server zu erstellen, der die Daten je nach Anfrage zur Verfügung stellt. (Ok das hatte iF schon gesagt)
Auf die Art spart man sich zusätzlich Datentransfer circa das Netzwerk, der z.B. durch Suchen in der Datenbank entstehen würde, was dann auch wieder der Geschwindigkeit zugute kommt. Damit fällt dann auch wohl das dbopen vor dem Schreiben der Daten wech ;)
MfG Torsten |
|
|
| Ich lerne, ob ich will oder nicht! Betriebssystem: - Ubuntu 15.x - Windows (diverse) XProfan Version: X2 | 02.10.2005 ▲ |
|
|
|
|
| Im Grunde nimmt sichs nichts ob DB im Internet oder DB im Lan - denn beide DBs sind keine Lokalen.
1-4 Benutzer sind wirklich nicht viel - aber die Problematik bleibt die selbe. [quote:f38503daa9]Wobei ich Sicherheit im Sinne von Integrität verstehe?[/quote:f38503daa9]Nicht ausschließlich - aber absolute Integrität besonders bei Stress sollte Priorität haben.
Mal ein paar Fragen:
Welches ist das ServerOS? (WinXPPro?) Welches ist das ClientOS ? (WinXPHome?) Was per eine DBFormat liegt vor? (SQL?) Ahnung von ODBC? |
|
|
| |
|
|
|
Rob Wilts | OS XP-Prof
DB liegen in dBase 4-Format vor
Keine Ahnung von ODBC |
|
|
| |
|
|
|
| |
|
| |
|
|
|
Rob Wilts | Danke aber kann nicht sagen, dass ich wirklich weitergekommen bin
folgendes kleines BEispielprogramm
cls declare A&
CHDIR DATA print getdir$(@) A&=@SQLINIT(DSN=FBS_ORG) print a& SQLEXEC SELECT * FROM KURSPROGRAMM.DBF,1 ListBox$(Ergebnis:,2)
waitkey
Erzeugt bei SQLEXEC die Fehlermeldung Kann Objekt KURSPROGRAMM.DBF nicht finden
Was mache ich falsch? A& <> 0 !!!!!!!!!!!! |
|
|
| |
|
|