質問: sqliteを使用しているアプリにてサーバー上にあるsqliteデータベース(ファイル)をローカルからメンテナンス(データ登録・削除)を行う方法は、どのような方法が一般的なのでしょうか? ・SMBなどでローカルからファイルが見れるようにする? ・ダウンロードしてローカルでメンテナンスしてアップロードする?
回答: 「SMBなどでローカルからファイルが見れるようにする」という方法は、処理速度が遅くなること、ネットワークのファイルシステムにバグがあり同時に複数の場所から同じデータベースの同じ部分に入力があった場合にはファイルが壊れることがあることから、あまり勧められる方法ではないと思います。 参考 SQLiteのドキュメントの Appropriate Uses For SQLite のページ > > If there are many client programs sending SQL to the same database over a network, then use a client/server database engine instead of SQLite. SQLite will work over a network filesystem, but because of the latency associated with most network filesystems, performance will not be great. Also, file locking logic is buggy in many network filesystem implementations (on both Unix and Windows). If file locking does not work correctly, two or more clients might try to modify the same part of the same database at the same time, resulting in corruption. Because this problem results from bugs in the underlying filesystem implementation, there is nothing SQLite can do to prevent it. > > > 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. > > > 「ダウンロードしてローカルでメンテナンスしてアップロードする」の問題点は、メンテナンスの間に、サーバーで入力があった場合の処理が難しいことだけです。 サーバーにSSHでログインして、SQLiteコマンドラインツールを使ってメンテナンスするのがいいとは思いますが、SQLiteのメリットである簡潔さが失われるようにも思います。SQLiteを使っているということは、それほど大規模なシステムではないということなので、運用を工夫して、「ダウンロードしてローカルでメンテナンスしてアップロードする」ことでメンテナンスしてもいいのではないでしょうか。