Spatialiteは同時アクセスをどのように処理しますか?


9

Spatialiteは一度に1人のユーザー/マシンが使用することを目的としていることを理解しています。ただし、データがサーバーに保存されている場合、別のマシンの誰かが同じデータベースを開いて使用しないという保証はありません。QGISとスペーシャルタイトがマルチユーザー環境にいることに対してどのように反応するかについて、誰かが何らかの経験を持っていますか?ほとんどの場合、レイヤーは読み取り専用レイヤーになります。QGISでは、複数のユーザーが同じシェープファイルを読み取ることができますが、これは同様の状況です。複数のユーザーが同時に編集セッションを開いている場合はどうなりますか?


1
何人のユーザーが話しているのですか?
Nathan W

ユーザーの数に基づいて質問の範囲を制限しないようにお願いします。おそらくユーザーの数によって変化しないメカニズムを理解することは役に立ちます。
2013

3
どのオペレーティングシステム?どのようなネットワークを介して?SQLiteは複数のリーダーを許可しますが、ライターは1つだけですが、OSは独自のレベルのロックを実施できます。
2013

私はWindows 7を使用していますが、Win XPも企業環境では一般的であり、アクセスはローカルエリアネットワークを介して行われます。クルードストレージも使用したいという人もいるかもしれませんが、同期または複製するシステムは使用できません。ユーザーに関しては、場合によっては最大10人のユーザーを想像します。残念ながら、これはヘルパーのチームなしではテストするのが難しいことなので、質問です。@scruss SQLiteはどのようにデータベースロックを実施しますか?
AndrewM 2013

4
:このようなファイルロックと同時実行でSQLiteのバージョン3。要約すると、通常は複数のリーダーを使用できますが、書き込みがすぐに保留中の場合は、ライターのみがファイル/データベース全体にアクセスできます。Windowsは非常に保守的なIMEである傾向があり、別のユーザーがファイルを開いて読み取りを行っている場合、ファイルへのアクセスを防止できます。QGISがSQLITE_BUSYの取得を待機して適切に再試行する場合、これは機能する可能性があります。ここでこれをテストする方法はありません。
2013

回答:


4

SQLiteは、最後の編集勝利モデルで動作します。これにより、書き込みブロックよりも重みの問題が発生します。QGIS / SQLite関係には編集セッションの追跡はありません。したがって、単一のライターブロック(SQLITE_BUSY)を取得した場合でも、QGISは単に編集に失敗し、エラーを返すだけなので、変更を再度送信します。

以下では、このタイプのイベントの処理と、QGisが再送信を処理する方法について説明します。

https://github.com/qgis/QGIS/blob/a3447dd9a346f6d5e08451b7c5666a37046435bc/src/core/spatialite/headers/spatialite/sqlite3.h#L1881-L1943

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.