Sqlite sur un partage réseau
Quelqu'un a-t-il une expérience réelle de l'exécution D'une base de données Sqlite sur un partage SMB sur un réseau local (Windows ou Linux)?
Il ressort clairement de la documentation que ce n'est pas vraiment le moyen le plus rapide de partager une base de données Sqlite.
Les mises en garde évidentes sont qu'il peut être lent, et Sqlite ne supporte qu'un seul thread écrivant dans la base de données à la fois. Donc, vous devenez beaucoup moins simultané parce que vos mises à jour de base de données vont maintenant bloquer la base de données plus longtemps (la base de données sera verrouillée pendant que les données sont en de transit sur le réseau).
Pour mon application, la quantité de données que je voudrais partager est assez faible et les Écritures ne sont pas trop fréquentes (quelques Écritures toutes les quelques secondes au plus).
À quoi dois-je faire attention? Cela peut-il fonctionner?
Je sais que ce N'est pas ce pour quoi Sqlite a été conçu, je suis moins intéressé par une solution basée sur Postgres/MySql/Sql Server car j'essaie de garder mon application aussi légère que possible avec un minimum de dépendances.
Liens Connexes:
De la liste de diffusion sqlite , donc je suppose qu'une grande question Est de savoir à quel point les API filelock sont peu fiables sur SMB (windows ou linux)
4 réponses
Mon expérience des bases de données basées sur des fichiers (c'est-à-dire celles sans processus de serveur de base de données), qui remonte à plus de vingt ans, est que si vous essayez de les partager, elles seront inévitablement éventuellement corrompues. Je vous suggère fortement de regarder à nouveau MySQL.
Et notez que je ne choisis pas SQLite-Je l'utilise moi-même, mais pas comme une base de données partagée.
Eh bien, je ne suis pas un grand expert sqlite mais je crois que le verrouillage des enregistrements / tables peut ne pas fonctionner correctement et peut rendre la base de données corrompue. Parce qu'il n'y a pas de serveur unique qui maintient le verrouillage central, deux instances sqlite dll sur des machines différentes partageant le même fichier sur le réseau peuvent ne pas fonctionner correctement du tout. Si la base de données est ouverte sur la même machine, sqlite peut utiliser le verrouillage au niveau du fichier offert par le système d'exploitation pour maintenir l'intégrité, mais je doute que cela fonctionne correctement sur le partage réseau.
" Si vous avez de nombreux programmes clients accédant à une base de données réseau, vous devriez envisager d'utiliser un moteur de base de données client/serveur au lieu de SQLite. SQLite fonctionnera sur un système de fichiers réseau, mais en raison de la latence associée à la plupart des systèmes de fichiers réseau, la performance ne sera pas géniale. En outre, la logique de verrouillage de fichier de nombreux l'implémentation des systèmes de fichiers réseau contient des bogues (sur Unix et Windows). Si le verrouillage de fichier ne fonctionne pas comme il se doit, il se peut que possibilité pour deux ou plusieurs programmes clients de modifier la même partie de la même base de données en même temps, ce qui entraîne la corruption de la base de données. Parce que ce problème résulte de bogues dans le système de fichiers sous-jacent implémentation, il N'y a rien que SQLite puisse faire pour l'empêcher."
À Partir de https://www.sqlite.org/whentouse.html
Cela s'applique également à tout type de bases de données basées sur des fichiers comme Microsoft Access
Vous avez demandé une expérience du monde réel. Voici quelques-uns:
Le verrouillage SQLite est robuste, en supposant que le système de fichiers sous-jacent (en réseau) est également robuste. Historiquement, cela a été une mauvaise hypothèse. Les systèmes d'exploitation récents l'obtiennent beaucoup mieux.
Si vous jouez selon les règles, votre plus gros problème sera les cas où la base de données reste "verrouillée" pendant plusieurs minutes d'affilée. Par exemple, si le réseau supprime une demande de "déverrouillage" d'un lecteur, il se peut que vous ne puissiez pas écrire jusqu'à ce que le verrou expirer. Si un "déverrouillage" de l'écrivain disparaît, vous serez incapable de lire. (Pour être juste, vous pouvez rencontrer les mêmes problèmes avec des documents.)
Vous aurez moins de problèmes sur un bon réseau fiable avec le" verrouillage opportuniste " (mise en cache de fichiers au niveau client) désactivé pour la base de données.