2012-06-02 3 views
8

Heroku советует против этого из-за возможных проблем. Я SQL noob, можете ли вы объяснить тип проблем, с которыми можно столкнуться при использовании разных баз данных?SQLite в разработке, PostgreSQL в производстве - почему бы и нет?

+1

Для одного вы не получите много более приятных функций PostgreSQL. Не то чтобы это очень важно, если вы просто используете ActiveRecord все время, а не что-то более сложное. Однако ошибки и проблемы с производительностью могут быть намного сложнее проследить. –

+2

SQLite сильно идиосинкразирован и, к примеру, на самом деле не полностью поддерживает типы данных SQL за минимальным минимумом. Например, если вы используете десятичный столбец с точностью и набором шкал, SQLite просто проигнорирует их и сделает ... что-то, в то время как Postgres woll округляют значения, которые вы сохраняете. Другое дело, что SQLite не имеет строковых столбцов с ограничением длины. Вероятно, есть еще много различий, которые заставят двоих вести себя по-разному в непредсказуемых краевых случаях, которые сделают для забавных ошибок. – millimoose

ответ

2

Различные базы данных интерпретируют и придерживаются стандарта SQL по-разному. Если бы вы, скажем, скопировали какой-то код из SQLite в PostgreSQL, есть очень большой шанс, что он не сразу начнет работать. Если это только базовые запросы, то, возможно, но, имея дело с чем-то конкретным, существует очень низкая вероятность полной совместимости.

Некоторые базы данных также более современны со стандартом. Это похоже на поле битвы с интернет-браузерами. Если вы когда-либо делали какие-то веб-сайты, вы бы знали, что совместимость - это боль в заднице, вынуждая его работать для более старых версий и Internet Explorer. Поскольку некоторые базы данных старше других, а некоторые даже старше стандартов, у них был бы собственный способ делать то, что они не могут просто отказаться и перейти на стандарт, потому что они потеряют поддержку своих существующих более крупных клиентов (это особенно относится к движку базы данных под названием Oracle). PostgreSQL похож на Google Chrome, довольно высокий уровень соблюдения стандартов, но все же с некоторыми из его собственных небольших причуд. SQLite, как следует из названия, представляет собой легкую систему баз данных. Вы можете предположить, что ему не хватает некоторых из более совершенных функциональных возможностей стандартов.

Двигатели базы данных также выполняют одни и те же действия по-разному. Стоит узнать и понять одну базу данных и как она работает (глубже, чем просто уровень запросов), чтобы вы могли максимально использовать ее.

11

Я использовал sqlite3 в разработке и postgres в производстве на некоторое время, но в последнее время переключился на postgres везде.

Вещи отметить, если вы используете как:

  • Существует различие между sqlite3 и Postgres, которые будут кусать вас. Обычная вещь, с которой я столкнулся, заключается в том, что postgres более строгие в типах запросов (where :string_column => <integer> отлично работает в sqlite и перерывы в postgres). Вы определенно хотите создать промежуточную область, которая использует postgres, если ваш dev является sqlite, и имеет значение, если ваше производственное приложение опускается из-за ошибки sql.

  • Sqlite является гораздо проще установить на локальном компьютере, и это здорово быть в состоянии просто удалить/переместить файлы .sqlite вокруг в дб/директории.

  • taps позволяет вам зеркалировать данные postgres героя в вашем локальном хранилище sqlite. Он становится намного медленнее, так как база данных увеличивается, а в нескольких десяти столах и 100K + строках начинается восстановление на 20 + минут.

  • Вы не получите Postgres функции, такие как ILIKE новый ключ/значение магазинов, полнотекстового поиска

  • Потому что вы должны использовать только широко поддерживаемые функции SQL, это может быть легче перенести приложение на MySQL

Так почему же я переключился? Мне нужны были только функции postgres, которые не попадали на ошибки, которые не были пойманы при тестировании, и должны были иметь возможность быстрее зеркалировать мое производство db (pg_restore занимает ~ 1 минута против 20+ для кранов). Мой совет - остаться с sqlite в dev из-за простоты, а затем переключиться, когда/если вам нужно спуститься по дороге. Переход от sqlite к postgres для разработки так же просто, как настройка postgres - от ожидания не возникает сложной сложности.

0

Я был в (вроде) подобной ситуации. Как правило, очень плохое использование различных двигателей баз данных для производства и тестирования. Есть несколько причин

  • синтаксис SQL различия, включая DML, заявления DDL, хранимых процедур, триггеров и т.д. оптимизации
  • Performance сделали на одной БД обыкновение быть действительным на другой
  • SQLite является встроенная база данных, PostgreSQL является не
  • Они не поддерживают одни и те же типы данных
  • Различные синтаксис/команды для настройки/настройки db. SQLite использует PRAGMAs

Нужно придерживаться одного двигателя дБ, если у вас нет действительно, действительно веской причины. Я не могу думать ни о чем.

Смежные вопросы