문제

나는 최근에 이 질문을 읽었습니다. SQLite와 MySQL 대답은 SQLite가 잘 확장되지 않으며 공식 웹 사이트를 지적했습니다. 일종의 이것을 확인합니다, 하지만.

SQLite는 얼마나 확장 가능하며 최대 한도는 얼마입니까?

도움이 되었습니까?

해결책

어제 작은 사이트를 공개했어요* 모든 방문자에 대해 공유 SQLite 데이터베이스를 사용한 담당자를 추적합니다.불행히도 내 호스트에 가해지는 적당한 부하에도 불구하고 꽤 느리게 실행되었습니다.업데이트/삽입이 포함되어 있기 때문에 누군가가 페이지를 볼 때마다 전체 데이터베이스가 잠겼기 때문입니다.곧 MySQL로 전환했고 테스트할 시간이 많지 않았지만 SQLite보다 확장성이 훨씬 더 뛰어난 것 같습니다.sqlite의 셸에서 쿼리를 실행하려고 할 때 느린 페이지 로드와 가끔 데이터베이스 잠김 오류가 발생했던 것을 기억합니다.그렇긴 하지만, 나는 SQLite에서 다른 사이트를 잘 운영하고 있습니다.차이점은 사이트가 정적이라는 점입니다(예:나는 데이터베이스를 변경할 수 있는 유일한 사람이므로 동시 읽기에 잘 작동합니다.이야기의 교훈:데이터베이스 업데이트가 거의 발생하지 않는(로드된 모든 페이지보다 덜 자주) 웹 사이트에만 SQLite를 사용하십시오.

편집하다:나는 방금 SQLite에 공평하지 않았을 수도 있다는 것을 깨달았습니다. 웹 페이지에서 SQLite 데이터베이스를 제공할 때 SQLite 데이터베이스의 열을 색인화하지 않았습니다.이로 인해 제가 겪고 있는 속도 저하가 부분적으로 발생했습니다.그러나 데이터베이스 잠금 상태를 관찰하면 특히 번거로운 업데이트가 있는 경우 SQLite 성능이 MySQL 또는 Postgres와 일치하지 않습니다.

또 다른 편집: 거의 3개월 전에 이 글을 게시한 이후로 SQLite의 확장성을 면밀히 조사할 기회가 있었고 몇 가지 트릭을 사용하면 SQLite의 확장성이 상당히 높아질 수 있습니다.첫 번째 편집에서 언급했듯이 데이터베이스 인덱스는 쿼리 시간을 크게 줄여 주지만 이는 SQLite에 대한 것보다 데이터베이스에 대한 일반적인 관찰에 더 가깝습니다.그러나 SQLite의 속도를 높이는 데 사용할 수 있는 또 다른 방법이 있습니다. 업무.여러 데이터베이스 쓰기를 수행해야 할 때마다 이를 트랜잭션 내부에 넣으십시오.쓰기 쿼리가 실행될 때마다 파일에 쓰고 잠그는 대신 쓰기는 트랜잭션이 완료될 때 한 번만 발생합니다.

첫 번째 단락에서 공개했다고 언급한 사이트는 다시 SQLite로 전환되었으며 몇 군데에서 코드를 조정하면 꽤 원활하게 실행됩니다.

* 해당 사이트는 더 이상 이용할 수 없습니다

다른 팁

Sqlite는 단일 사용자 측면에서 확장 가능하며 매우 잘 수행되는 수 기가바이트 데이터베이스를 가지고 있으며 이에 대해 많은 문제가 없었습니다.

하지만 그것은 ~이다 단일 사용자이므로 어떤 종류의 확장에 대해 이야기하고 있는지에 따라 다릅니다.

댓글에 대한 답변입니다.다중 사용자 환경에서 Sqlite 데이터베이스를 사용하는 것을 방해하는 것은 없지만 모든 트랜잭션(사실상 데이터베이스를 수정하는 모든 SQL 문)은 파일, 이는 다른 사용자가 데이터베이스에 액세스하는 것을 방지합니다. 조금도.

따라서 데이터베이스를 많이 수정한 경우 기본적으로 확장 문제가 매우 빠르게 발생하게 됩니다.반면에 쓰기 액세스에 비해 읽기 액세스가 많다면 그다지 나쁘지 않을 수도 있습니다.

그러나 Sqlite는 물론 기능 다중 사용자 환경에서는 그렇지 않습니다. 공연하다 잘.

SQLite는 sqlite.org 웹사이트와 트래픽이 많은 다른 웹사이트를 구동합니다.그들은 당신이 가지고 있다면 제안합니다 10만 미만 일일 히트 수는 SQLite가 제대로 작동해야 합니다.그리고 그것은 "Writeahead Logging" 기능을 제공하기 전에 작성되었습니다.

SQLite로 작업 속도를 높이려면 다음을 수행하십시오.

  • SQLite 3.7.x로 업그레이드
  • 할 수 있게 하다 미리 쓰기 로깅
  • 다음 pragma를 실행합니다."Pragma cache_size = 페이지 번호;" 기본 크기 (페이지 숫자)는 2000 페이지이지만 해당 숫자를 올리면 메모리에서 바로 실행되는 데이터의 양을 올릴 수 있습니다.

YouTube에서 ''라는 제목의 내 동영상을 시청해 보세요.미리 쓰기 로깅으로 SQLite 성능 향상"에서는 미리 쓰기 로깅을 사용하는 방법을 보여주고 쓰기 속도가 5배 향상되었음을 보여줍니다.

SQLite는 데스크탑 또는 과정에서 데이터 베이스.SQL Server, MySQL, Oracle 및 그 형제는 서버.

데스크탑 데이터베이스는 본질적으로 좋은 선택이 아닙니다. 어느 데이터 저장소에 대한 동시 쓰기 액세스를 지원해야 하는 애플리케이션입니다.여기에는 지금까지 만들어진 대부분의 웹 사이트가 어느 정도 포함됩니다.로그인이 필요한 경우에는 DB에 대한 쓰기 권한이 필요할 수 있습니다.

이 SQLite 문서를 읽어 보셨나요? http://www.sqlite.org/whentouse.html ?

SQLITE는 일반적으로 저가에서 중간 중간 트래픽 웹 사이트의 데이터베이스 엔진으로 잘 작동합니다 (즉, 모든 웹 사이트의 99.9%).SQLITE가 처리 할 수있는 웹 트래픽의 양은 물론 웹 사이트가 데이터베이스를 얼마나 많이 사용하는지에 달려 있습니다.일반적으로, 100k 미만의 적중을 얻는 모든 사이트는 SQLITE에서 잘 작동해야합니다.100k 히트/데이 그림은 단단한 상한이 아닌 보수적 인 추정치입니다.SQLITE는 트래픽의 10 배로 작동하는 것으로 입증되었습니다.

SQLite 확장성은 사용되는 데이터와 해당 형식에 따라 크게 달라집니다.나는 매우 긴 테이블(GPS 기록, 초당 하나의 기록)에 대해 힘든 경험을 했습니다.경험에 따르면 SQLite는 부분적으로 인덱스를 보유하는 성장하는 이진 트리의 지속적인 재조정으로 인해 단계적으로 속도가 느려지는 것으로 나타났습니다. 알다 해당 트리는 많이 재조정될 것이지만 검색에는 매우 중요합니다.)그래서 결국 약 1GB(아주 대략적인 수준)에서 제 경우에는 쿼리가 느려집니다.귀하의 마일리지는 다양합니다.

한 가지 기억해야 할 점은 모든 자랑에도 불구하고 SQLite는 데이터 웨어하우징용으로 만들어지지 않았다는 것입니다.용도가 다양해요 권장하지 않음 SQLite의 경우.SQLite 뒤에 있는 훌륭한 사람들은 다음과 같이 말합니다.

SQLite를 보는 또 다른 방법은 다음과 같습니다.SQLite는 Oracle을 대체하도록 설계되지 않았습니다.fopen()을 대체하도록 설계되었습니다.

그리고 이것은 주요 주장(정량적, 미안하지만 질적)으로 이어집니다. SQLite는 모든 용도에 적합한 것은 아니지만 MySQL은 이상적으로는 아니더라도 다양한 용도를 포괄할 수 있습니다.예를 들어 SQLite 대신 MySQL에 Firefox 쿠키를 저장하도록 할 수 있지만 해당 서비스가 항상 실행되어야 합니다.반면에 MySQL 대신 SQLite(많은 사람들이 그러는 것처럼)에서 트랜잭션 웹 사이트를 실행할 수 있지만 가동 중지 시간이 많이 걸릴 것으로 예상됩니다.

내 생각에는 수백 명의 클라이언트를 서비스하는 웹 서버가 데이터베이스에 대한 단일 연결을 통해 백엔드에 나타나는 것 같습니다. 그렇지 않습니까?

따라서 데이터베이스에는 동시 액세스가 없으므로 데이터베이스가 '단일 사용자 모드'에서 작동하고 있다고 말할 수 있습니다.그러한 상황에서 다중 사용자 액세스를 논의하는 것은 의미가 없으므로 SQLite는 다른 서버 기반 데이터베이스와 마찬가지로 작동합니다.

이렇게 생각해보세요.SQL Lite는 누군가 사용할 때마다 잠깁니다(SQLite는 읽기 시 잠기지 않습니다).따라서 웹 페이지나 여러 동시 사용자가 있는 애플리케이션을 제공하는 경우 SQLLite를 사용하면 한 번에 한 사람만 앱을 사용할 수 있습니다.그래서 바로 스케일링 문제가 있습니다.수백 개의 타이틀, 등급, 정보, 사용법, 재생, 재생 시간을 보유하는 음악 라이브러리를 말하는 1인 애플리케이션이라면 SQL Lite는 수백만 개의 레코드는 아니더라도 수천 개의 레코드를 보유하여 아름답게 확장됩니다(하드 드라이브 사용 가능).

반면에 MySQL은 모든 사람들이 동시에 사용하는 서버 앱에 적합합니다.잠기지 않고 크기도 꽤 큽니다.따라서 음악 라이브러리의 경우 MySql은 수천 명이 추가하거나 업데이트하는 공유 음악 라이브러리가 아닌 이상 단 한 사람만 볼 수 있기 때문에 과도할 것입니다.그렇다면 MYSQL을 사용할 것입니다.

따라서 이론적으로 MySQL은 Sqllite보다 확장성이 뛰어나므로 여러 사용자를 처리할 수 있지만 단일 사용자 앱에는 과잉입니다.

SQLite의 웹사이트(당신이 참조한 부분)는 다양한 다중 사용자 상황에 사용될 수 있음을 나타냅니다.

나는 그것이 꽤 감당할 수 있다고 말하고 싶습니다.내 경험상 항상 매우 빨랐습니다.물론 테이블을 인덱싱해야 하며 이에 대해 코딩할 때 매개변수화된 쿼리 등을 사용해야 합니다.기본적으로 성능을 향상시키기 위해 모든 데이터베이스에서 수행하는 것과 동일한 작업입니다.

확인해 볼 가치가 있을 수도 있습니다 실제 SQL 서버, SQLite를 기반으로 구축된 데이터베이스 서버입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top