2010-12-27 3 views
47

SQLite 나 SQL Server를 사용하는 것이 가장 좋은 점은 무엇입니까? 나는 XML 파일을 데이터 저장소 ADD, 삭제, 업데이트로 사용하고 있었다. 어떤 것은 빠른 작업을 위해 SQLite를 사용하도록 제안되었지만 SQLite를 가진 familier가 아니다.SQLite와 SQL Server

+5

또한 약간의 잘못된 비교입니다. "실제"RDBMS (예 : Oracle, SQLServer, PostgreSQL, MySQL)와 비교하여 단일 파일 솔루션 (예 : SQLite, MS Access)을 비교하고 있습니까? 이름에서 "SQL"과 그냥 비교합니까? ;-) 여기에는 많은 기준이 있습니다 (오픈 소스와 상업용 - SQLServer는 상업용이지만 SQLite는 오픈 소스 임). 유형이 지정된 열 대 유형이없는 열 (SQLite 열은 본질적으로 유형이 지정되지 않음). 확장 성 대 소규모; –

+2

@Breakhead, 개인 용도로 사용하거나 여러 사용자가 동시에 데이터를 쓰지 않고 데이터 보안에 문제가 없다면 SQLite는 엄청난 양의 데이터로도 문제가 없을 것입니다 . MS-Access "JET"데이터 엔진 대신 SQLite를 사용할 수 있습니다. SQLServer 나 Oracle과 같은 선의의 클라이언트 - 서버 데이터베이스 엔진은 아닙니다. – Tim

+0

상태 저장 객체를 지속시킬 것을 고려할 수 있습니다. 나는이 기술을 사용해 왔으며 아주 잘 작동한다.지속 된 상태 보존 객체를 SQLite로 대체하려고 시도했을 때 SQLite가 훨씬 느린 것으로 나타났습니다. 너무 많이 처리하여 영구 보존 된 상태 저장 객체로 되돌려 야했습니다. – John

답변

76

SQLite는 응용 프로그램과 함께 배포하는 훌륭한 내장 데이터베이스입니다. 고객이 설치할 분산 응용 프로그램을 작성하는 경우 SQLite는 별도의 설치 프로그램이나 유지 관리가 필요 없다는 큰 이점이 있습니다. 나머지 응용 프로그램과 함께 배포되는 DLL은 하나뿐입니다.

또한 SQLite는 프로세스 중에 실행되며 데이터베이스가 가져 오는 많은 오버 헤드를 줄입니다. 모든 데이터는 캐시되고 처리 중에 쿼리됩니다.

SQLite는 SQL Server보다 .NET 응용 프로그램과 잘 통합됩니다. SQLite 엔진 내에서 실행되지만 응용 프로그램의 호출 프로세스 및 공간 내에있는 모든 .NET 언어로 사용자 정의 함수를 작성할 수 있으므로 응용 프로그램에 호출하여 추가 데이터를 통합하거나 쿼리를 실행하는 동안 작업을 수행 할 수 있습니다. 이 매우 특별한 능력은 특정 행동을 훨씬 쉽게 만듭니다.

SQLite는 일반적으로 SQL Server보다 훨씬 빠릅니다.

그러나 SQLite는 한 번에 하나의 작성자 (개별 트랜잭션 실행을 의미) 만 지원합니다. SQLite는 잠금 (읽기 또는 쓰기)이 필요할 때 전체 데이터베이스를 잠그고 한 번에 하나의 작성자 만 쓰기 잠금을 유지할 수 있습니다. 속도가 빠르기 때문에 중소 규모 응용 프로그램에서는 실제로 문제가되지 않지만 더 많은 양의 쓰기 (초당 수백 개)가 있으면 병목 현상이 발생할 수 있습니다. 데이터베이스 데이터를 다른 데이터베이스로 분리하고 큐에 쓰기를 캐싱하고 비동기 적으로 쓰기와 같은 여러 가지 가능한 솔루션이 있습니다. 그러나 응용 프로그램이 이러한 사용 요구 사항에 부딪쳐 SQLite 용으로 작성되지 않은 경우 SQL Server와 같은 다른 기능을 사용하는 것이 가장 좋습니다.

업데이트 : SQLite 3.7.0에는 쓰는 동안 동시 읽기를 지원하는 Write Ahead Locking이라는 새로운 저널 모드가 추가되었습니다. 우리의 내부 다중 가격 경쟁 테스트에서, 타이밍은 110 초에서 8 초로 진행되어 동일한 논쟁의 읽기/쓰기 순서를 유지했습니다.

+2

"SQLite는 .NET 응용 프로그램과 통합됩니다 * SQL 서버보다 * 더 나은 *"이라는 의견 만 분쟁합니다. [강조 추가] 둘 다 다른 방법으로 .NET 응용 프로그램과 통합 될 수 있습니다. SQL Server에서 CLR 클래스를 정의하고 클라이언트와 서버간에 이러한 클래스의 인스턴스를 보낼 수 있습니다. SQlite에서는 SQLite로 가져올 수있는 .NET 언어로 사용자 정의 UDF를 작성할 수 있습니다. 또한 "저용량에서 중간 규모의 응용 프로그램"과 같은 문구는 실제로 의미가 없습니다. "크기"란 무엇을 의미합니까? – Tim

+0

@Tim, 나는 초당 최대 * 수백 개의 쓰기가 필요한만큼 저속에서 중도로 구체적으로 호출했습니다. 그 금액보다 위의 경합은 너무 문제가됩니다. –

+1

안녕하세요 사무엘, sqlite는 SQL의 모든 기능을 지원합니까? 또는 가벼운 무게 때문에 아키텍처가 제한적으로 사용합니다. –

4

둘 다 서로 다른 리그에 있습니다. 하나는 엔터프라이즈 급 데이터 관리 용으로 설계된 것이고 다른 하나는 모바일 장치 용 (임베디드 또는 서버 환경이 적음)입니다. SQLite 배포는 수백 GB에 달하는 데이터를 보유 할 수 있지만 구축 된 데이터는 아닙니다.

업데이트 : 업데이트 된 질문 반영 : this blog post을 SQLite에서 읽으십시오. 도움이 되었으면 좋겠지 만 .NET에서 SQLite에 프로그래밍 방식으로 액세스하기 위해 리소스로 리디렉션 할 때 액세스 할 수 있기를 바랍니다.

관련 문제