프로덕션 서버의 SQLite? [닫은]


9

나는 오랫동안 SQLite에 대해 알고 있었고 그것이 빨리 타오르는 것을 알고 있지만 프로덕션 서버에서는 시도하지 않았습니다. 나는 실패하기 전에 얼마나 많은 트래픽을 처리 할 수 ​​있는지에 대한 확실한 추정치를 찾지 못했습니다.

누구든지 이것에 대한 숫자 나 기사가 있습니까?


2
경고 : 질문과 답변 중 일부에는 오해, 오해 및 오래된 정보가 포함되어 있습니다!
Chris S

우리는 생산에 캐싱 솔루션으로 SQLite는 평가했습니다 : uri.agassi.co.il/2014/10/using-sqlite-for-production.html
열린 우리당 아가시

답변:


4

불행히도로드 기능에 대한 수치는 없지만 성능 제한 요소에 대한 몇 가지 의견이 있습니다.

  • SQLite의 속도는 디스크 속도와 많은 삽입 / 업데이트가 있는지 (예 : 쓰기 액세스) 여부에 영향을받습니다. 쓰기 잠금은 디스크 회전 속도에 의해 제한됩니다

  • 트랜잭션은 기본적으로 시작되지만 트랜잭션 시작하고 커밋 하면 성능이 향상됩니다 . 프로그래밍 방식으로 트랜잭션을 처리 할 때 매우 빠른 대량 삽입이있었습니다.

  • 일반적으로 데이터를 읽는 경우 내 경험에서 좋은 성능을 얻습니다. 따라서 SQLite는 데이터베이스 서버 읽기, 특히 원격 쿼리 또는 복잡한 쿼리를 저장하는 캐싱 시스템으로 사용할 수 있습니다.

  • 데이터베이스 서버보다 적은 리소스를 사용하므로 웹 서버 및 응용 프로그램 코드에 더 많은 리소스를 확보함으로써 사이트 성능에 영향을 줄 수 있습니다.

  • 여러 동시 쓰기가 필요한 경우 데이터베이스 서버 (예 : MySQL, Postgres)가 더 나은 서비스를 제공 할 수 있습니다

으로 Devrim가 100,000 사용자 주위에 SQLite는 사이트의 상태를 언급 한 / 일 잘해야한다. Trac 시스템에는 쓰기가 필요하므로이 경우 성능이 느려질 수 있습니다.


응답에 감사드립니다. 기본적으로 한 번에 데이터베이스 1에만 쓸 수 있습니까? 그러나 여전히 많은 사람들이 데이터베이스를 잠그지 않고 읽을 수 있습니까? 그렇다면 캐싱 시스템에 대한 몇 가지 아이디어를 얻었습니다.
Dr

던져진 "100K"숫자는 쓸모가 없습니다. 문서는 "일반적으로 하루에 100K 미만의 조회수를 기록하는 사이트는 SQLite에서 제대로 작동합니다."라고 읽습니다. "적중"은 일반적으로 HTTP 요청으로 정의됩니다. 여기에는 모든 .js, .css 및 적중시 이미지에 대한 요청이 포함됩니다. 이것이 DB 성능과 어떤 관련이 있습니까? 저자가 "페이지 뷰"를 의미한다고 가정해도 여전히 쓸모가 없습니다. 페이지 뷰당 몇 개의 검색어입니까? 읽기 대 쓰기 비율 DB는 어떤 종류의 하드웨어에서 실행됩니까? 작업에 대해 더 나은 다른 도구가 12 개 이상있는 경우 웹 사이트에 SQLite를 사용하는 것은 좋지 않습니다.
jamieb

@Dr Hydralisk 예, 읽기는 병렬로 발생할 수 있습니다. 파일처럼
Cez

@jamieb "히트"에 대한 요점은 공정한 것입니다. 그러나 사용 가능한 하드웨어 또는 서버 리소스에 대해서는 아무도 언급하지 않았으므로 우리가 아는 모든 가상 서버 일 수 있습니다. 캐싱 시스템 또는 주로 읽기 전용 테이블에 SQLite 데이터베이스를 포함하면 특히 데이터베이스 서버가 원격 서버 인 경우 성능 이점을 얻을 수 있습니다 . 데이터베이스 쿼리의 메모리 캐시 + SQLite 캐시는 데이터베이스 쿼리만으로 팬을 이길 수 있습니다.
Cez

3

이 좋은 답변에 덧붙일 요점이 있습니다.

현재 버전의 SQLite에는 WAL (Write-Ahead Logging)이 있으므로 읽기와 쓰기가 동시에 진행될 수 있습니다. 따라서 이전 답변에서 언급 한 전통적인 단일 작가 제한은 더 이상 존재하지 않습니다. 프로덕션에서 WAL을 아직 보지 못했기 때문에 WAL이 얼마나 잘 확장되는지 언급 할 수 없습니다.

WAL 사용 여부에 관계없이 SQLite 데이터베이스가 읽기 전용 (또는 배치 업데이트)이고 RAM에 적합하면 (OS에는 버퍼에 보관하기에 충분한 여유 RAM이 있음) 프로덕션 웹 응용 프로그램에서 매우 잘 확장 될 수 있습니다. 나는 개인적으로 성능, 확장 성 및 견고성에 대해 회의적이지만 9 개월 후에 는 시스템의 가장 복잡한 부분 까지도 잘 작동하는 것으로 입증되었습니다 .


1

Sqlite는 응용 프로그램에 포함하기에 적합하며 이것이 바로 설계된 것이지만 "매우 빠르지는"않습니다. 나는 내 자신의 여러 응용 프로그램에 사용합니다. 순전히 작동하는 응용 프로그램을 제공하기 위해 다른 컴퓨터에 복사 할 수있는 두 파일 만 있으면 편리합니다. 동일한 구조, 인덱스 등을 사용하여 MySQL에 대한 테스트를 수행하면 소규모 데이터베이스의 경우에도 Sqlite가 상당히 느려집니다. 데이터베이스 크기가 증가함에 따라 성능 차이가 커질 것으로 예상하지만 100MB 미만의 데이터베이스에서만 사용했기 때문에 확실하게 말할 수는 없습니다.


PRAGMA는 때때로 데이터베이스를 손상시킬 가능성이 있지만 (데이터를 잃지 않음) 성능 향상을 위해 조정할 수 있습니다. 내 경험에 따르면 SQLite가 오래된 WindowsXP 시스템에서 약 250-300rps로 삽입 할 수 있습니다.
djangofan

동의하지 않기 때문에 -1. 나는 몇 GB 크기의 SQLite 데이터베이스를 구축하고 쿼리했으며 (예를 들어 동일한 유형의 하드웨어에서) MySQL을 사용하여 초당 동일한 양의 쿼리를 얻지 못할 것입니다. SQLite는 올바르게 마사지 하는 방법을 알고 있다면 초당 120k 쓰기 쿼리를 쉽게 수행 할 수 있습니다 .
Alix Axel

0

sqlite는 text / xml 파일보다 빠르다고 생각합니다 (시도하면 놀라실 수 있습니다). 또한 사람들이 근무 시간을 등록하거나 trac 발권을 사용하는 인트라넷 용 사이트를 만들려는 경우 동시성을 지원하지 않습니다. 그 외에는 피하고 mysql 또는 couchdb로 대체해야합니다.

sqlite 웹 사이트에 따르면 하루에 100k 명의 사용자는 괜찮을 것이지만 간단한 trac 프로젝트는 10 ppl 사무실 사용으로 인해 많이 붙어 있기 때문에 의심합니다.


0

Sqlite는 전통적인 클라이언트 / 서버 DB 애플리케이션이 아닙니다. 본질적으로 다른 응용 프로그램에 포함 된 라이브러리입니다. 단일 사용자 데스크톱 응용 프로그램을 위해 설계되었습니다. 전체 DB가 쓰기에 잠겨 있기 때문에 다중 사용자 환경에서 일종의 독립형 MySQL / PostgreSQL / MS-SQL 대체로 사용하려고하지 마십시오. 경부 하에서도 성능 문제를 일으킬 수있는 경합 문제를 처리하게됩니다.


WAL에서는 동시 작성기 만 차단됩니다. 또한 기본 MySQL 엔진 (MyISAM)은 쓰기 쿼리가있을 때마다 전체 테이블을 잠급니다.
Alix Axel

1
@AlixAxel이 답변은 WAL을 사용할 수있게되기 6 개월 전에 작성되었습니다.
jamieb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.