11

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

4

3 回答 3

15

我在开发中使用了 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 一样简单 - 等待不会增加复杂性。

于 2012-06-02T01:52:00.170 回答
2

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

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

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

于 2012-06-02T01:48:43.247 回答
0

I was in a (kind of) similar situation. Generally it is a very bad idea to use different database engines for production and test. There are multiple reasons

  • SQL syntax differences including DML, DDL statements, stored procedures, triggers etc
  • Performance optimizations done on one DB wont be valid on the other
  • SQLite is an embedded database, PostgreSQL is not
  • They don't support the same data types
  • Different syntax/commands to configure/setup db. SQLite uses PRAGMAs

One should stick to one db engine, unless you have a really, really good reason. I can't think of any.

于 2012-06-02T02:07:56.247 回答