【问题标题】:SQLite in development, PostgreSQL in production—why not?开发中的 SQLite,生产中的 PostgreSQL——为什么不呢?
【发布时间】:2012-06-07 05:17:36
【问题描述】:

Heroku 建议不要这样做,因为可能存在问题。我是一个 SQL 菜鸟,你能解释一下使用不同的数据库可能会遇到的问题类型吗?

【问题讨论】:

  • 对于一个你没有得到很多 PostgreSQL 更好的特性的人。如果您只是一直使用 ActiveRecord 而不是更复杂的东西,这并不重要。但是,错误和性能问题可能更难追踪。
  • SQLite 具有很强的特殊性,例如并不能真正完全支持超出最低限度的 SQL 数据类型。例如,如果您使用具有精度和比例集的小数列,SQLite 将忽略这些并做一些事情,而 Postgres 将四舍五入您保存的值。另一件事是 SQLite 没有长度受限的字符串列。可能还有更多差异,这将使两者在不可预测的边缘情况下表现不同,从而产生有趣的错误。

标签: ruby-on-rails sqlite postgresql heroku


【解决方案1】:

我在开发中使用 sqlite3 并在生产中使用 postgres 有一段时间,但最近到处都切换到 postgres。

同时使用的注意事项:

  • sqlite3 和 postgres 之间的差异会咬你一口。我遇到的一个常见问题是 postgres 对查询类型更严格(where :string_column => <integer> 在 sqlite 中可以正常工作并在 postgres 中中断)。如果您的开发人员是 sqlite,那么您肯定想要一个使用 postgres 的暂存区,并且如果您的生产应用程序由于 sql 错误而停机,这很重要。

  • Sqlite 在您的本地计算机上设置要容易得多,而且能够在您的 db/ 目录中删除/移动 .sqlite 文件真是太好了。

  • taps 允许您将 heroku postgres 数据镜像到本地 sqlite 数据库中。随着数据库变得越来越大,它变得越来越慢,并且在几十个表和 100K+ 行的情况下,它开始需要 20+ 分钟才能恢复。

  • 你不会获得像 ilike、新的键/值存储、全文搜索这样的 postgres 功能

  • 因为您只能使用广泛支持的 SQL 功能,所以将您的应用迁移到 mysql 可能会更容易

那我为什么要切换?我想要一些仅限 postgres 的功能,不断遇到测试未发现的错误,并且需要能够更快地镜像我的生产数据库(pg_restore 需要大约 1 分钟,而 Taps 需要 20 多分钟)。我的建议是在开发中使用 sqlite,因为它很简单,然后在需要时/如果需要时切换。从 sqlite 切换到 postgres 进行开发就像设置 postgres 一样简单 - 等待不会增加复杂性。

【讨论】:

    【解决方案2】:

    不同的数据库以不同的方式解释和遵守 SQL 标准。比如说,如果你要将一些代码从 SQLite 复制粘贴到 PostgreSQL,那么它很有可能不会立即起作用。如果只是基本查询,那么可能,但在处理任何特定问题时,完全兼容的可能性非常低。

    一些数据库也更符合标准。这是一个类似于互联网浏览器的战场。如果您曾经创建过一些网站,您就会知道兼容性是一件令人头疼的事情,必须让它适用于旧版本和 Internet Explorer。因为有些数据库比其他数据库老,有些甚至比标准老,他们会有自己的做事方式,他们不能放弃并跳到标准,因为他们会失去对现有大客户的支持(对于称为 Oracle 的数据库引擎尤其如此)。 PostgreSQL 有点像 Google Chrome,在标准合规性方面相当高,但仍有一些自己的小怪癖。顾名思义,SQLite 是一个轻量级的数据库系统。您可以假设它缺少标准中的一些更高级的功能。

    数据库引擎也以不同的方式执行相同的操作。了解和理解一个数据库及其工作原理(不仅仅是查询级别)是值得的,这样您就可以充分利用它。

    【讨论】:

      【解决方案3】:

      我处于(某种)类似的情况。通常,使用不同的数据库引擎进行生产和测试是一个非常糟糕的主意。有多种原因

      • SQL 语法差异,包括 DML、DDL 语句、存储过程、触发器等
      • 在一个数据库上进行的性能优化在另一个数据库上无效
      • SQLite 是嵌入式数据库,PostgreSQL 不是
      • 它们不支持相同的数据类型
      • 配置/设置数据库的不同语法/命令。 SQLite 使用 PRAGMAs

      一个人应该坚持一个数据库引擎,除非你有一个非常非常好的理由。我想不出来。

      【讨论】:

        猜你喜欢
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 2019-02-05
        • 1970-01-01
        • 1970-01-01
        • 2019-05-14
        • 1970-01-01
        • 2012-09-10
        相关资源
        最近更新 更多