【问题标题】:SQLite database remote accessSQLite 数据库远程访问
【发布时间】:2018-02-14 03:34:21
【问题描述】:
我在本地机器上有一个 SQLite 数据库,而我在同一台机器上运行的 Web 服务使用 SQLAlchemy 访问它,如下所示:
engine = create_engine('sqlite:///{}'.format('mydatabase.db'), echo=True)
我们计划在托管数据库的单独机器上托管我们的 Web 服务。我们如何才能使我们的 Web 服务可以远程访问这个“mydatabata.db”以访问我的 Web 服务?谢谢。
【问题讨论】:
标签:
database
sqlite
web-services
sqlalchemy
rdbms
【解决方案1】:
来自 SQLite when to use 文档:
客户端/服务器 RDBMS 可能更好地工作的情况
如果有许多客户端程序通过网络向同一个数据库发送 SQL,则使用客户端/服务器数据库引擎而不是 SQLite。 SQLite 将在网络文件系统上工作,但由于与大多数网络文件系统相关的延迟,性能不会很好。此外,文件锁定逻辑在许多网络文件系统实现(在 Unix 和 Windows 上)中存在缺陷。如果文件锁定不能正常工作,两个或多个客户端可能会尝试同时修改同一数据库的同一部分,从而导致损坏。因为这个问题是由底层文件系统实现中的错误导致的,所以 SQLite 无法阻止它。
一个好的经验法则是避免在将通过网络从多台计算机直接访问(没有介入的应用程序服务器)并同时从多台计算机访问同一数据库的情况下使用 SQLite。
SQLite 适用于嵌入式系统,或者至少当您在同一台计算机上使用它时。恕我直言,您必须迁移到较大的 SQL 解决方案之一,例如 PostgreSQL、MariaDB 或 MySQL。如果您已经通过 ORM (SQLAlchemy) 生成了所有查询,那么迁移到另一个 RDBMS 将没有问题。但是即使编写 SQL 查询也不应该有太多问题,因为所有这些 RDBMS 都使用非常相似的方言(不像微软的 T-SQL)。由于 SQLite 是 lite,它只支持其他 RDBMS 支持的一个子集,所以应该没有问题。