Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQLite und konkurrierender Zugriff mit FireDAC (https://www.delphipraxis.net/198724-sqlite-und-konkurrierender-zugriff-mit-firedac.html)

Codehunter 26. Nov 2018 18:28

Datenbank: SQLite • Version: 3.25.3 • Zugriff über: FireDAC

SQLite und konkurrierender Zugriff mit FireDAC
 
Hallo!

Für ein kleines Spaßprojekt habe ich mir folgendes Konzept ausgedacht: Windows-Netz, Datenbankdatei auf dem Netshare und Clientanwendung auf mehreren Rechnern. Absichtlich ohne Datenbankserver. Das Ganze ist weder Last- noch Zeitkritisch. Die Anwendung funktioniert soweit, lesend wie auch schreibend. Im Grunde wie erwartet gibt es ab und zu wegen der konkurrierenden Zugriffe "Datebase-is-locked"-Fehler. Allerdings habe ich hier und da Hinweise gesehen, dass man SQLite durch verschiedene Connection-Parameter verträglicher machen kann für eine solche Konstellation. Nur hatte ich dabei bisher noch keinen Erfolg. Falls jemand Erfahrungen damit hat wäre ich für Tips dankbar. Alternativ zu FireDAC könnte ich auch mit wenig Aufwand auf ZEOS oder UniDAC wechseln.

Grüße
Cody

Der schöne Günther 26. Nov 2018 18:51

AW: SQLite und konkurrierender Zugriff mit FireDAC
 
(Hervorhebung durch mich)

Zitat:

SQLite assumes that these system calls all work as advertised. If that is not the case, then database corruption can result. One should note that POSIX advisory locking is known to be buggy or even unimplemented on many NFS implementations (including recent versions of Mac OS X) and that there are reports of locking problems for network filesystems under Windows. Your best defense is to not use SQLite for files on a network filesystem.
Quelle: https://www.sqlite.org/lockingv3.html


und

Zitat:

A good rule of thumb is to avoid using SQLite in situations where the same database will be accessed directly (without an intervening application server) and simultaneously from many computers over a network.
Quelle: https://www.sqlite.org/whentouse.html

Codehunter 26. Nov 2018 19:02

AW: SQLite und konkurrierender Zugriff mit FireDAC
 
@Günther: Kenne ich. Die zitierte Seite weist aber selbst darauf hin, dass es inzwischen Verbesserungen gibt.

Der schöne Günther 26. Nov 2018 19:25

AW: SQLite und konkurrierender Zugriff mit FireDAC
 
Uh, wenn du meinst?

Zitat:

All processes using a database must be on the same host computer; WAL does not work over a network filesystem.

Einer schreibt und alle anderen lesen jederzeit nur - Das würde ich mich vielleicht noch trauen. Aber mehr nicht.

Codehunter 26. Nov 2018 19:28

AW: SQLite und konkurrierender Zugriff mit FireDAC
 
Wenn ich es wüsste hätte ich ja nicht gefragt. :) SQLite ist hier auch nur ein Versuch. Die Grundidee soll eine Datenbank ohne Serverdienst sein. Der Name der DB ist verhandelbar :D

Schokohase 26. Nov 2018 21:11

AW: SQLite und konkurrierender Zugriff mit FireDAC
 
Zitat:

Zitat von Codehunter (Beitrag 1419301)
Die Grundidee soll eine Datenbank ohne Serverdienst sein. Der Name der DB ist verhandelbar :D

Du wirst damit ein einigermassen stabiles System hinbekommen - egal wie der Name der DB lautet. Ein zuverlässig stabiles System aber nicht.

Wenn eingermassen reicht, dann bist du auf dem richtigen Weg.
Wenn du zuverlässig brauchst, dann verbrennst du gerade einfach nur Zeit.

scrat1979 26. Nov 2018 21:29

AW: SQLite und konkurrierender Zugriff mit FireDAC
 
Eventuell wäre hier Absolute Database in der MultiUser Edition eine Option. Allerdings kostenpflichtig. Ob es sich für ein Spassprojekt lohnt kannst nur du entscheiden. Ich arbeite sehr gerne damit :)

jobo 27. Nov 2018 08:33

AW: SQLite und konkurrierender Zugriff mit FireDAC
 
Was ich an dem Szenario interessant finde:
Du sagst, es gibt keine hohe Last, wenig Teilnehmer/ Konkurrenz. Trotzdem tritt aber der Fehler auf.

Tritt er auf, weil Du Lasttest machst und ihn den Fehler provozierst oder tritt er bereits in der beschriebenen Normalsituation auf?

Und wie sind die Parameter konkret?
Nutzeranzahl:
Schreibzugriffe pro Minute, Stunde, Tag:

EgonHugeist 27. Nov 2018 09:09

AW: SQLite und konkurrierender Zugriff mit FireDAC
 
@Cody,

der Fehler tritt auf, weil FireDac ein Performace-Blender ist. FireDac setzt alle !DB defaults! zu max Performace-settings. Wogegen alle ander Komponenten das nicht machen. Bei Zeos mußt du das explizit setzen.

Schau mal in die Antwort von:
https://stackoverflow.com/questions/...qlite-database
Dort steht beschieben, wie du FD wieder für konkurierende Zugriffe nutzbar machen kannst.

kleines ABER:
SQLite ist rasend schnell mit den FD settings. Zum Vergeich: https://synopse.info/forum/viewtopic.php?id=4472
Jedoch in den default-settings solltest du mit wirklich erhöhter Disk-Aktivität rechnen.
SQLite ist einfach nicht dafür gemacht, aber kann es.

jobo 27. Nov 2018 09:59

AW: SQLite und konkurrierender Zugriff mit FireDAC
 
Interessant!
normal versus exclusive Lock würde ich jetz nicht gleich als Performance Blendung bezeichnen.
Ein Exclusive Lock entspricht ja vollkommen der Bestimmung von sqlite und neben der dadurch gewonnenen Performance, bringt es ja im Zweifel auch "bessere" Daten (wobei ich nichts über die Qualität des "Normal Lock" Modes von sqlite weiß)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:29 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz