내부 사용 웹 사이트 : SQLite에 대한 강력한 사례가 있습니까?


23

Flask 또는 Django 와 같은 많은 웹 프레임 워크 는 SQLite 를 기본 데이터베이스로 사용 합니다. 파이썬에 포함되어 있기 때문에 SQLite 는 매력적이며 관리 오버 헤드는 매우 낮습니다.

그러나 트래픽이 많은 공개 프로덕션 사이트는 mySQL, Oracle 또는 postgresql과 같은 더 무거운 데이터베이스를 사용합니다.

질문 :

취하다:

  • 사이트 트래픽이 적당하며 데이터베이스에 대한 동시 읽기 / 쓰기 액세스가 발생합니다
  • 우리는 SQLite 쓰기 잠금 과 함께 SQLAlchemy 를 사용할 것입니다 ( 이 의견 은 나를 약간 긴장 시키지만 )
  • 데이터베이스에는 아마도 60,000 개의 레코드가 포함될 것입니다
  • 데이터 구조는 더 무거운 데이터베이스에서 찾을 수있는 고급 기능이 필요하지 않습니다

트래픽이 중간 정도 인 내부 회사 도구로 사용되는 웹 사이트 에 대한 SQLite 동시성에 대한 강력한 사례가 있습니까? 그렇다면 SQLite 가 동시성 문제를 일으키는 조건은 무엇 입니까?

일반적인 두려움 / 입증되지 않은 손가락 포인팅 대신 알려진 특정 근본 원인을 찾고 있습니다.


sqllite는 백업 등에 유용한 복제 등의 기능을 어떻게 사용합니까? SQLlite에서는 앱이 db를 소유하고 있다는 인상을 받았습니다. 앱이 실행되는 동안 관리자 스크립트 등을 실행할 수 있습니까?
Doug T.

1
SQLite 및 동시성에 대한 일부 일화 (대부분 긍정적) : sqlite3 동시 액세스
Daniel B

1
내부 웹 사이트의 경우 SQLite의 매력적인 이유는 무엇입니까? RDBMS 설치에 대한 제한이 있습니까?
JeffO

개별 개발자의 랩톱에서 개발 환경을 단순화하는 것 외에는 이유가 없습니다. 물론 문제는 우리가 개발 및 생산 환경을 합리적으로 단순화 할 수 있는지 여부입니다.
Mike Pennington

답변:


23

귀하의 질문에 대한 공식 답변, 적절한 사용을위한 SQLite 를 읽으십시오 . 특히 "다른 RDBMS가 더 잘 작동 할 수있는 상황"에서는 SQLite가 동시 쓰기를 지원 하지 않는다고 경고합니다 .

SQLite는 무제한의 동시 판독기를 지원하지만 한 번에 한 명의 작성자 만 허용합니다. 많은 상황에서 이것은 문제가되지 않습니다. 각 응용 프로그램은 데이터베이스가 빠르게 작동하고 계속 진행하며 수십 밀리 초 이상 동안 잠금이 지속되지 않습니다. 그러나 더 많은 동시성이 필요한 일부 응용 프로그램이 있으며 해당 응용 프로그램은 다른 솔루션을 찾아야 할 수도 있습니다.

적절한 관점에서 SQLite를 SQL 쿼리를 지원하는 매우 정교한 파일 형식으로 보는 경향이 있습니다. 이 경우에 최적화되지 않았으므로 데이터베이스를 웹 응용 프로그램과 분리하려는 경우 SQLite를 피하는 경향이 있습니다. 요컨대, SQLite는 일부 시나리오에서 사용하기에 충분히 확장 할 수 없으므로 언젠가 인기를 얻고 자하는 웹 사이트를 운영하는 사람들은 SQLite를 사용하고 나중에 전환하도록 강요하는 것보다 확장 가능한 것으로 시작하는 것이 좋습니다.

SQLite는 아마도 대부분의 내부 웹 사이트에 적합 할 것입니다. 일반적으로 내부 웹 사이트에는 동일한 수준의 동시성과 확장 성이 필요하지 않습니다.


대부분의 외부 웹 사이트도 마찬가지입니다. PostGres가 처음부터 더 나은 선택이지만 EF와 같은 것을 사용하면 데이터베이스 엔진을 교체 할 수 있습니다.
Robert Harvey

EF는 무엇입니까?
Mike Pennington

@ MikePennington : 엔티티 프레임 워크. 데이터베이스 투명성이 있거나 최소한 드라이버를 교체 할 수있는 다른 ORM이 있다고 생각합니다.
Robert Harvey

1
pythonic에 해당하는 것은 SQL Alchemy
Wyatt Barnett

"저는 SQLite를 SQL 쿼리를 지원하는 매우 정교한 파일 형식으로 보는 경향이 있습니다." 완벽한 정의.
와일드 카드

4

IT 디렉터 모자를 착용하면 몇 가지 문제가 없습니다.

  • 데이터 손상 위험. 아마도 실제보다 더 지각력이 높지만 하루가 끝났을 때 이것은 트랜잭션이 아닌 파일 유형 DB이며 최근 백업이 있는지 묻는 것 외에도 나쁜 쓰기에 대한 의지가 많지 않습니다. 말하자면 . . .
  • 이걸 어떻게 백업합니까? 어떤면에서 나는 좋은 사본을 얻었다는 것을 안다. 앱을 오프라인으로 전환하지 않는 것이 좋습니다.
  • DB에 대한 액세스를 어떻게 보호 할 수 있습니까? 필자의 일반적인 이해는 SQL lite가 파일 시스템 액세스 외부에 아무것도 없다는 것입니다. 이는 괜찮은 시작이지만 모든 것이 아닙니다. 특히 DBA보다 더 많은 권한을 원하는 웹 응용 프로그램의 경우 또는 아무것도 없습니다.

개발자의 관점에서 SqlLite가 왜 기본인지 아는 것이 중요하다고 생각합니다. 쉽고 간단하고 데모하기 때문입니다. 새로운 개발자에게 플랫폼을 "판매"하는 경우 최소한의 번거 로움없이 작동하는 웹 앱을 실행할 수 있어야합니다. 그리고 데이터베이스 서버를 세우고 올바르게 구성해야하는 것은 피해야 할 엄청난 걸림돌입니다.


1
음, 백업은 SQLite Backup API 를 통해 수행 할 수 있습니다 . SQLite 클라이언트는 서비스 지향 시스템과 달리 SQLite 클라이언트가 데이터베이스 파일과 더 직접 통신하기 때문에 기본적으로 SQLite가 안전하지 않을 수 있음을 인정합니다. 즉, SQLite는 저널을 사용하여 시스템 장애로부터 보호하며 호스트 OS가 SQLite가 사용하는 잠금 기본 요소를 올바르게 지원하면 (네트워크 디스크 I / O는 지원하지 않는 경우) 신뢰성을 가져야합니다. 공식 사이트에는 손상된 SQLite 데이터베이스로 이어질 몇 가지 시나리오 가 나와 있습니다.
Brian

SQLite는 트랜잭션 입니다. 백업 API를 사용 하거나 MediaWiki의 백업 스크립트 를 조정하여 온라인 백업을 수행하십시오. SQLite의 보안 모델에 대한 일반적인 이해가 정확합니다. 공식 보안 조언은 '상식'이다 : 사람들이 데이터베이스 파일에 액세스하고 그에 따라 웹 응용 프로그램을 설계 할 수있는 방법에 대해 생각합니다.
Iain Samuel McLean Elder

@Brian- "이 데이터베이스가 어떻게 손상 될 수 있는가"에 대한 전체 페이지가있는 다른 DB를 생각하기가 어려웠습니다. 나는 sql lite 프로젝트가 놀랍다는 것을 발견 할 것이다 .- 그들은 일종의 견과류이기 때문에 페이지를 가지고있을 것이고 또한 모든 생산 코드 라인에 대해 10 줄의 테스트 코드와 같으며 실제로 확실하고 철저한 것을 좋아합니다.
Wyatt Barnett
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.