本地 SQLite 与远程 MongoDB

Posted

技术标签:

【中文标题】本地 SQLite 与远程 MongoDB【英文标题】:Local SQLite vs Remote MongoDB 【发布时间】:2012-02-26 13:53:44 【问题描述】:

我正在设计一个新的 Web 项目,在研究了一些针对可扩展性的选项后,我想出了两个数据库解决方案:

为可扩展的方式精心设计的本地 SQLite 文件(每个 X 用户一个新的数据库文件,因为写入将取决于用户内容,不依赖于跨用户数据); 远程 MongoDB 服务器(如 Mongolab),因为我的主机服务器不服务于 MongoDB。

我不信任当前共享主机上的 mysql 服务器,因为它经常出现故障(而且我在另一台主机上也遇到了 MySQL 问题)。出于同样的原因,我不会使用 postgres。

SQLite 的优点:

它是本地的,所以它必须更快(我会注意正确使用索引和事务); 我不需要担心 tcp 嗅探,因为 Mongo 有线协议 is not crypted; 我不需要担心服务器中断,因为 SQLite 是无服务器的。

MongoDB 的优点:

它更易于扩展; 我不必担心拆分数据库,因为可扩展性似乎很自然; 我不需要担心架构更改,因为 Mongo 是无架构且 SQLite doesn't fully support alter table(特别考虑更改许多生产文件等)。

我需要帮助来做出决定(也许考虑第三种选择)。当读写操作增长时,哪个更好?

我将使用 Ruby。

【问题讨论】:

MongoDb 针对写操作进行了优化 @Adrian: 言过其实 :-) 【参考方案1】:

SQLite 方法的一个主要风险是,随着您对扩展的需求增加,您将无法(轻松)在多个应用程序服务器上进行部署。您也许可以将您的用户划分到不同的服务器中,但如果该服务器出现故障,您将有一部分用户无法访问他们的数据。

使用 MongoDB(或任何其他集中式服务)可以缓解此问题,因为您的 Web 服务器是无状态的 - 可以随时添加或删除它们以适应 Web 负载,而不必担心哪些数据存放在哪里。

【讨论】:

以上是关于本地 SQLite 与远程 MongoDB的主要内容,如果未能解决你的问题,请参考以下文章

高危安全预警SQLite远程代码执行漏洞

在android中将SQLite数据库与远程mysql数据同步

在 Android 中将 Sqlite 数据库与远程服务器同步

将 Android 应用上的 SQLite DB 与远程 MySQL DB 同步

将 Android 应用数据库与远程 API 同步的策略

Python sqlite:使用未指定数量的参数的executemany()