2012-06-02 2 views
8

Heroku는 가능한 문제로 인해이 문제에 대해 조언합니다. 저는 SQL 멍청한 녀석입니다. 다른 데이터베이스를 사용할 때 발생할 수있는 문제의 유형을 설명 할 수 있습니까?개발중인 SQLite, 프로덕션 환경의 PostgreSQL - 왜 그렇지 않습니까?

+1

당신은 PostgreSQL의 더 멋진 기능을 많이 사용하지 않습니다. ActiveRecord를 사용하고 있으면서도 더 복잡한 것은 아닙니다. 그러나 버그와 성능 문제는 추적하기가 훨씬 어려울 수 있습니다. –

+2

SQLite는 매우 특이하며 예를 들어 SQL 데이터 형식을 최소한으로 완전히 지원하지는 않습니다. 예를 들어, 십진수 열을 정밀도와 눈금 집합으로 사용하면 SQLite는 그걸 무시하고 무시합니다. Postgres는 저장중인 값을 반올림합니다. 또 다른 한가지는 SQLite는 길이가 제한된 문자열 열이 없다는 것입니다. 흥미 진진한 버그에 대해 예측할 수없는 엣지 경우에 두 가지 동작이 다르게 동작하게 만드는 차이가 더 많습니다. – millimoose

답변

2

다른 데이터베이스는 SQL 표준을 해석하고 다르게 적용합니다. 말하자면 SQLite에서 PostgreSQL으로 코드를 복사 해 붙여 넣는다면 즉시 작동하지 않을 가능성이 매우 큽니다. 그것은 단지 기본 쿼리 일 뿐이며, 아마도 특별한 경우라면 완벽한 호환성의 가능성은 매우 낮습니다.

일부 데이터베이스는 표준과 함께 최신 버전입니다. 그것은 인터넷 브라우저와 비슷한 전장입니다. 혹시 일부 웹 사이트를 만든 적이 있다면, 호환성은 이전 버전과 Internet Explorer에서 작동하도록해야하는 엉덩이의 고통이라는 것을 알고있을 것입니다. 일부 데이터베이스는 다른 데이터베이스보다 오래되었고 일부는 표준보다 오래 되었기 때문에 기존 대형 고객에 대한 지원을 잃어 버리기 때문에 스크랩하거나 표준으로 이동할 수없는 고유 한 방식을 사용했을 것입니다 (특히 Oracle이라는 데이터베이스 엔진의 경우). PostgreSQL은 Google 크롬과 비슷하지만 표준 준수에 있어서는 상당히 높은 편이지만 약간의 고유 한 단점을 가지고 있습니다. SQLite는 이름에서 알 수 있듯이 가벼운 데이터베이스 시스템입니다. 표준에서 제공하는 고급 기능 중 일부가 부족하다고 생각할 수도 있습니다.

데이터베이스 엔진도 동일한 동작을 다르게 수행합니다. 하나의 데이터베이스와이 데이터베이스가 작동하는 방식 (쿼리 수준 이상)을 이해하고 이해하면됩니다. 따라서 최대한 활용할 수 있습니다.

11

잠시 동안 프로덕션 환경에서 개발 및 포스트그레스에서 sqlite3을 사용했지만 최근에는 모든 곳에서 포스트그레스로 전환되었습니다. 당신이 사용하는 경우

유의할 것들 모두 :

sqlite3를하고 물린 것 포스트 그레스 사이에 차이가 있습니다
  • . 내가 만났던 공통점은 postgres가 쿼리의 형식에 대해 더 엄격하다는 것입니다 (where :string_column => <integer>은 sqlite에서 제대로 작동하고 포스트그레스에서 중단됩니다). dev에 sqlite가 있고 postgres를 사용하는 준비 영역을 원한다면 SQL 오류로 인해 프로덕션 응용 프로그램이 다운되면 중요합니다.

  • Sqlite는 입니다.은 로컬 컴퓨터에서 설정하기 쉽고 db/디렉토리에서 .sqlite 파일을 삭제하거나 이동할 수 있다는 점에서 좋습니다.

  • taps 당신의 로컬 sqlite db로 heroku postgres 데이터를 미러링 할 수 있습니다. 데이터베이스가 커짐에 따라 훨씬 느려지 며, 10 ~ 10 개의 테이블과 100K + 행으로 복원하는 데 20 분 이상 걸립니다.

  • 당신은 ILIKE, 새로운 키/값을 저장, 전체 텍스트 검색과 같은 포스트 그레스 기능을받지 않습니다

  • 만 광범위하게 지원 SQL 기능을 사용하기 때문에, MySQL의에 응용 프로그램을 마이그레이션하는 것이 더 쉬울 수 있습니다

그래서 전환 한 이유는 무엇입니까? postgres 전용 기능을 원했고, 테스트에서 잡히지 않은 버그를 계속해서 잡았고, 내 프로덕션 db를 더 빨리 미러링 할 수 있어야했습니다 (pg_restore는 탭에 대해 1 분 ~ 20 분이 소요됩니다). 내 충고는 단순성 때문에 dev에 sqlite를 유지하고, 당신이 길을 따라갈 필요가있을 때/때 전환한다. 개발을 위해 sqlite에서 postgres로 전환하는 것은 postgres를 설정하는 것만 큼 간단합니다. 대기에서 더 이상 복잡성이 없습니다.

0

비슷한 상황이었습니다. 일반적으로 프로덕션 및 테스트를 위해 다른 데이터베이스 엔진을 사용하는 것은 매우 나쁜 생각입니다. 여러 이유

DML, DDL 문, 저장 프로 시저를 포함
  • SQL 구문의 차이는, 늘 다른
  • SQLite는에 유효 하나의 DB에서 수행 등
  • 성능 최적화가 포함 된 데이터베이스가되는 트리거입니다, PostgreSQL은있다 아니요
  • 이들은 동일한 데이터 유형을 지원하지 않습니다.
  • /setup db를 구성하는 다른 구문/명령. SQLite는 PRAGMA를 사용합니다.

정말로, 정말로 좋은 이유가 없다면, 하나의 db 엔진을 고수해야합니다. 나는 어떤 것도 생각할 수 없다.

관련 문제