SQLite가 약간 과소 평가되지 않습니까? [닫은]


15

질문하기 전에 먼저 SQLite에 대한 내 생각을 설명하겠습니다.

작고 빠르며, 더 중요한 것은 실제로 필요한 기능 만 갖춘 도구를 좋아합니다. 그래서 나는 SQLite를 좋아하고 MS-SQL을 조금 덜 좋아합니다.

예를 들어, MS-SQL에는 훨씬 더 많은 기능, 확장 성 등이있을 수 있지만 운이 좋지 않으면 설치하기가 어려울 수도 있습니다. 물론, 어려운 설치가 특정 데이터베이스를 선택하지 않는 이유는 아닙니다.

나를 잘못 이해하지 마십시오 : MS-SQL은 양질의 제품입니다. 저는 MS-SQL에 매우 경험이 있습니다. 나는 전문가로서 제품을 잘 이해합니다. 실제로 필요하지 않은 일부 환경에서는 선호 하지 않습니다 (= 10-15 미만의 많은 사용자).

실제로 사용하는 데이터베이스 기능은 어느 정도입니까? 내 경험상 종종 일반적인 SQL (SELECT, INSERT 및 UPDATE) 일뿐입니다.

나는 SQLite를 좋아한다. 매우 빠릅니다. "설치"가 매우 쉽습니다. SQLite가 할 수있는 것보다 더 많은 것을 할 수 있다고 생각합니다. 단일 프로세스 / 단일 사용자 애플리케이션에만 사용하는 이유는 무엇입니까? 결국 : 많은 응용 프로그램이 지속적으로 데이터베이스에 액세스하지 않습니다.

예를 들어 15 명의 사용자가있는 ERP 응용 프로그램을 생각해보십시오. 왜 SQLite를 사용할 수 없습니까? 직접 경험해 보자. 전문적인 경험에서 이런 종류의 응용 프로그램 사용자는 응용 프로그램을 사용하는 총 시간의 약 5-10 % 동안 데이터베이스에 액세스합니다. 다른 90-95 %는 화면에서 정보를보고 그리드 / 폼에 데이터를 입력하고 1 초 이하의 데이터베이스 시간을 입력을 저장하는 경우입니다. Fe : 1,5 분의 입력 시간과 1 초의 절약 시간.

"저장 시간"동안 SQLite 데이터베이스 파일이 잠긴 경우 데이터베이스에 액세스해야하는 다른 사용자는 기다리지 만 대기 시간이 매우 작기 때문에 알 수 없습니다 (알릴 수 없음). 코드에서는 예외를 피하기 위해 데이터베이스의 가능한 "사용 중"시간을 처리해야하지만 그렇게 어렵지는 않습니다.

나와 똑같이 생각해야하는 일부 사람은 SQLite를위한 클라이언트-서버 솔루션 인 SQLitening 도 구축했습니다 . 이것은 나 자신을 속이지 않을 수도 있다는 확신을 갖게 해주었다.

물론 SQLite가 적합하지 않은 데이터베이스 집약적 인 응용 프로그램이 있습니다. 그러나 지금 생각하면 많은 다중 사용자 응용 프로그램이 15 명을 초과하지 않으면 SQLite로 잘 수행해야합니다.

많은 고객이 하드웨어에 많은 비용을 소비하지 않기 때문에 Exchange, SQL, 클라이언트 등 모든 것이 포함 된 단독 서버를 자주 만나게되므로 거의 "숨을 쉬지"않습니다. 시스템 요구 사항이 높지 않은 제품을 제공 할 수 있다면 고객은 만족할 것입니다. SQLite는 무게를 추가하지 않지만 적어도 MS-SQL은 그다지 중요하지 않습니다. 따라서 무료, 저렴하거나 설치하기 쉬운 SQLite를 선택하지 않을 것입니다. 실용적 / 기술적 인 이유로 선택합니다.

참고 : 제 직업에서 평균 5 ~ 6 명 정도가 제품을 사용하는 고객에게 제품 (사용자 정의 및 표준, 대부분 ERP 관련)을 판매합니다. 일부 예외는 있지만 10-15 명 이하의 사용자입니다.

질문 : 내가 설명한 예제와 같은 일부 다중 사용자 응용 프로그램에 SQLite를 사용할 수 있다고 생각하고 있습니까? 알아야 할 기술적 단점이 있습니까? 올바른 선택을하는 데 도움이되는 귀하의 경험 (부정적 또는 긍정적)은 무엇입니까?

업데이트 : 다른 데이터베이스에 대한 부정적인 판단으로 보지 마십시오. 그들은 대부분 모든 훌륭한 제품입니다. 여기에 내 생각을 공유하고 이것에 대한 당신의 의견에 관심이 있습니다.


9
죄송하지만 "맞습니까?" rant를 질문으로 바꾸지 않습니다.
pdr

1
@ pdr : 왜 이것을 rant라고 생각합니까? MS-SQL 또는 다른 데이터베이스를 부정적으로 판단하지 않습니다. 그들은 대부분 모든 훌륭한 제품입니다. 나는 단지 내 생각을 공유하고 있으며 다른 동료 프로그래머의 의견을 듣고 싶습니다. 더 이상 아무것도 없습니다.

3
거기에는 의문의 여지가 없으며 유효성 검사 만 검색하십시오. FAQ에서 : "실제로 직면하고있는 실제 문제에 기초하여 실용적이고 응답 가능한 질문 만해야합니다. 채팅, 개방형 질문은 우리 사이트의 유용성을 떨어 뜨리고 다른 질문은 첫 페이지로 밀어냅니다." programmers.stackexchange.com/faq
pdr

1
@ pdr : 이해하지만 정직하게 여기에 질문을했습니다. 어쩌면 나는 명확하지 않았으므로 질문을 다시 표현했습니다.

4
데이터베이스 선택, 코드 최적화, 클라이언트, 서버 또는 웹 기반 응용 프로그램은 모두 고려해야 할 영역이므로 이러한 플랫폼에서 장단점을 논의해야합니다. 누군가가 특정 기술에서 어떤 상환 품질을 찾는 것을 거부 할 때 저에게 더 큰 관심을 보입니다.
JeffO

답변:


8

SQLite가 많은 인스턴스가 많이 있습니다. 사용자, 부서 또는 회사는 거의 그것을 능가하지 않습니다 (응용 프로그램이 제대로 작동하는 경우 아무도 프로그래머를 호출하지 않기 때문에 많이 들리지 않습니다.) MS Access 파일 (Windows)에 대해 동일한 주장을 할 수 있습니다. SQL Server Compact Edition (일부 설치 필요) 파일의 보안에 대해 걱정할 필요가 없기 때문에 로컬 응용 프로그램에 충분합니다.

로컬 네트워크의 다중 사용자 scenerio에서 파일은 모든 사용자가 액세스 해야하는 공유 폴더로 이동합니다-보안을 호출하십시오. 간단한 유지 관리 또는 백업과 같은 테이블 구조 변경 또는 열 추가는 다른 사용자의 액세스를 막을 것입니다. 어제 밤 누군가가 응용 프로그램을 종료하는 것을 잊었 기 때문에 백업이 작동하지 않았습니다. 정오에 백업을 수행하려고하면 어떻게됩니까? 모든 사람들은 데이터베이스의 기술적 한계로 인해 하루 동안 백업이 필요 없다고 합리화합니다. 어느 시점에서, 서버에 SQL Server Express / 기타 동등 제품을 설치하면 초기 설정 및 보안 구성이 필요하고보다 초기 단계에 관여하지만 유지 관리가 거의 필요하지 않습니다.

확장 성 / 엔지니어링에 대한 우려는 항상 있습니다. 사용자 수 또는 데이터 양이 여전히 관리 가능하더라도 누군가는 항상 일부 인트라넷 또는 다른 웹 사이트 / 브라우저 인터페이스에서 라이브 데이터를 활용한다는 아이디어를 가지고 있습니다. 파일 데이터베이스에 문제가 있습니다. VPN을 통해 데이터 파일에 액세스하려는 한 사람 (앱이 랩톱에 설치되어 있음) 만 있으면 '스케일링'문제가 발생합니다. 연결이 끊긴 사용자가 돌아올 때 동기화 할 수 있도록 앱을 빌드 할 수 있습니다. 가끔씩 외근 사용자에게는 그만한 가치가없는 것 같습니다.


SQL Server Compact Edition에 대해 동일한 주장을 할 수 있지만 MS Access 데이터베이스에는 해당 되지 않습니다 . 액세스 데이터베이스는 실제 데이터베이스처럼 취급되지만 공유 파일처럼 작동합니다. 그것들은 깨지기 쉬운 해결책입니다. SQL Server Compact는 실제로 액세스 프런트 엔드와 함께 작동하는보다 우수하고 빠르며 안정적인 대안입니다. 기술적으로 공유 파일 솔루션이지만 SQLite가 Access 데이터베이스보다 훨씬 내구성이 있다고 생각합니다.
Robert Harvey

@RobertHarvey-우리는 MS Access가 10 년 동안 Excel보다 우수한 솔루션을 요구하는 비즈니스 요구를 가지고 있습니다. 큰 거래가 이루어질 때, 우리는 무언가를 시작해야합니다. 액세스 기술을 갖춘 고급 사용자는 훨씬 쉽게 찾고 활용할 수 있습니다. 기능은 특정 날짜까지 존재해야하지만 확장 성, 성능, 데이터 증가 및 보안이 결코 중요하지 않은 점은 운이 좋습니다. Access 업그레이드, 이제 다른 이야기입니다.
JeffO

날 잘못 이해하지 마라. 액세스가 훌륭하다고 생각합니다. 그러나 SQL Server Compact는 사용자가 데이터를 공유하는 새로운 Access 응용 프로그램의 최소 백엔드 요구 사항입니다.
Robert Harvey

@RobertHarvey-나는 그것을 조사해야 할 것이다. 감사합니다
JeffO

12

"내부"데이터베이스가 필요할 때 사용하는 것이 좋습니다. 즉, 응용 프로그램 / 코드와 상호 작용하는 데이터베이스이지만 응용 프로그램이 존재하는 주된 이유와 직접 관련이 없습니다. 거대한 인 메모리 매핑이나 캐시 관리자를 사용하는 대신 이러한 데이터베이스를 사용할 수도 있습니다. 나는 최근에 데이터베이스에 연결하고, 작업을 수행하고, 데이터를 읽고, 마지막에 모든 것을 지우는 JUnit / DBunit 테스트 사례에서 이것을 사용했기 때문에 매우 구체적인 예를 가지고 있습니다. 데이터베이스작성 하기 위해 빈 파일 만 작성하면되므로 매우 쉽습니다.

또 다른 사용법은 사용자가 한 명일 때입니다. 예, 가능 합니다. 예를 들어 "Firefox"또는 "Opera" 를 생각하십시오 :-)

또한 SQLite 웹 사이트에서이 정보에 대해 매우 정직하며 IT를 사용하지 않는 이유를 제시합니다 ( "다른 RDBMS가 더 잘 작동 할 수있는 상황"단락 참조)

추신 : Sql Server Express에 대한 의견과 관련하여 "설치"해야합니다. 그리고 개인적으로 업데이트하는 데 문제가있었습니다 (2008 R2를 설치하려면 이전 버전과 관련된 일부 레지스트리 키를 수동으로 제거해야했습니다). 그러나 SQLite를 Microsoft에서 개발 한 데이터베이스와 비교 하려면 설치 하지 않아도되는 Sql Server Compact Edition을 참조하십시오 ( "개인 파일 기반 배포"참조).


나는 CE를 보았지만 어떻게 든 SQLite가 더 빠르거나 빠릅니다. 확실하지 않습니다, 나는 CE를 충분히 사용 / 테스트하지 않았습니다.

5

예를 들어 15 명의 사용자가있는 ERP 응용 프로그램을 생각해보십시오. 왜 SQLite를 사용할 수 없습니까?

사용자 수가 적은 응용 프로그램은 거의 없습니다. 그리고 더 많은 사용자와 더 복잡한 데이터 조작이 발생하는 경우 SQLite를 사용하는 것은 단순한 "한 번에 한 번의 쓰기 트랜잭션"잠금 모델로 인해 성능상의 이유로 완전히 문제가되지 않습니다.

각 사용자가 60 초 동안 양식을 작성한 후 제출하는 100 명의 사용자가 있다고 가정 해 보겠습니다. 따라서 초당 약 1.6 개의 트랜잭션을 처리해야합니다. 데이터 모델은 복잡하며 양식을 저장하려면 많은 다른 테이블을 읽고 쓰는 작업이 필요하며 다른 시스템과 통신하는 경우도 있으므로 각 "제출 양식"은 2 초의 트랜잭션이 발생합니다. 그러나 SQLite는 트랜잭션을 동시에 처리 할 수 ​​없으므로 이는 스콘 당 0.5 개의 트랜잭션 만 처리 할 수 ​​있습니다. 죄송합니다.

"설치가 어려울 수 있습니다"는 중요한 인프라를 결정해야하는 좋은 이유가 아닙니다. 게다가, 선택할 수있는 다른 DB 엔진이 있는데,이 중 적어도 2 개 (MySQL 및 Postgres)는 무료이며 SQLite의 동시성 제한이 없습니다. MS-SQL보다 설치가 더 쉬울 수도 있습니다.


나는 이해하고 동의한다. 하지만 제 직업에는 10 명 이상이 우리 제품 (표준 및 사용자 정의, 대부분 ERP 관련)을 사용하는 고객이 없습니다. 평균적으로는 5-6 명입니다. 나는 나의 질문을 다시 말할 것이다.

4
@Marcus V : 문제는 고객이 많이 성장하여 구축 한 앱의 사용 속도가 매우 느리다는 것을 알게되면 DBMS가 많은 사용자를 처리 할 수없고 " 더 나은 DBMS를 사용하지 않은 이유는 무엇입니까? "설치하기 어려운"답변을 어떻게받을 수 있다고 생각하십니까? 나는 나의 반응이 무엇인지 말할 수있다. "이것은 아마추어이다. 내 소프트웨어를 작성할 다른 사람을 찾아야한다"고 생각한다.
Michael Borgwardt

네가 옳아. 나는 당신이 그런 식으로 그것을 의미하지 않았다고 생각하지만, 나는 내가 아마추어가 아니라고 확신 할 수 있습니다. 상황에 따라 "실제"DBMS 시스템을 사용할 것입니다. 당사 제품은 여러 사용자에게 라이센스가 부여됩니다. 사용자 수가 비교적 적다는 것을 알고있는 경우에만 SQLite를 사용하여 개발하려고합니다 (<10-15). 고객이 한도를 초과하지 않는 한도를 초과하면 고객을 다른 데이터베이스로 비교적 빠르게 / 간단하게 변환 할 수 있습니다. 그것은 로켓 과학이 아닙니다.). 귀하의 의견을 바탕으로 질문을 더 명확하게 표현했습니다.

응용 프로그램을 확장하는 것에 대해 파울을하는 사용자는 사용자 제한에 대해 알았지 만 더 저렴한 경로를 선택했습니다. 초기 설정에는 문제가 없지만 새 서버에 설치하기 위해 파일을 복사했을 때 추가 비용을 청구해야하는 경우 얼마나 만족할까요?
JeffO

1
@ Jeff O : 당신이 내 의도를 오해 한 것 같아요. 난 하지 가 및 / 또는 쉬운 설치 무료, 저렴하기 때문에 SQLite는 선택. 작고 빠르며 리소스 친화적이기 때문에 선택해야합니다. 따라서 실용적 / 기술적 이유로 주로 사용됩니다. 많은 고객이 하드웨어에 많은 비용을 들이지 않기 때문에 대부분의 서버 (Exchange, SQL 등)가있는 유일한 서버를 만나게되므로 거의 "숨을 쉬지"않습니다. 시스템 요구 사항이 높지 않은 제품을 제공 할 수 있다면 고객은 만족할 것입니다. MSite는 SQLite에 가중치를 추가하지 않습니다.

4

SQLLite는 응용 프로그램 개발에 탁월하다고 생각합니다. 가장 큰 장점은 클라이언트에 설치할 필요가 없다는 것입니다.

그러나 SQL Server Express를 과소 평가하지 마십시오. 일반적인 우수한 도구를 사용할 수있는 능력과 함께 데이터베이스 크기 (제한하기 어려운)와 제한이있는 일반 SQL Server의 기능을 대부분 갖춘 무료 우수한 데이터베이스입니다. SQL 서버.

가장 큰 단점은 afaik이 설치해야한다는 것입니다.하지만 그 부분에 대해서는 조금 확신 할 수 없지만 지금은 방법이 될 수 있습니다.


2
네가 옳아. MS-SQL Express는 우수한 품질의 제품입니다. 단지 부풀어 오르고 너무 많은 리소스를 사용한다는 것을 알았습니다. 요즘 PC / 서버는 문제가되지 않습니다. 나는 더 강력하고 더 강력한 하드웨어가 내가 그것을 피할 수 있다면 자원을 소홀히하거나 낭비해야한다는 것을 의미하지는 않는다고 생각하는 고교생입니다. 덜 좋습니다 ...;).

2
DB 엔진이있는 데이터베이스는 디스크에서 읽거나 쓰지 않고 메모리를 캐싱하여 액세스를 최적화 할 수 있습니다. 그러나 SQL Lite와 같은 In-process DB의 성능에 대해서는 잘 모르겠습니다.
sarat

1
@sarat : Afaik SQLite는 메모리 캐시를 집중적으로 사용합니다.

2

매시간 몇 GB의 데이터를 처리하는 경우 SQLite를 심각한 데이터베이스로 간주하지 않습니다. 고통스럽게 느려져 전체 응용 프로그램의 성능이 저하됩니다. 죄송하지만 SQLite에 대한 귀하의 매력에 동의하지 않습니다 :-)


1
나는 당신의 의견을 존중합니다. 나는 단지 실용적인 사람입니다. 도구를 선택할 때 도구가 가장 현실적 / 실제적인 결정이라고 생각하기 때문에 도구를 선택합니다. 나는 SQLite에 매혹되지는 않지만 그들이 작고 효율적이며 빠른 패키지에 너무 많이 넣는 방식에 감탄합니다. 내 질문에서 언급했듯이 MS-SQL이 특정 작업에 더 적합한 도구라면 간단히 선택합니다. 그러나 내가 설명한 것처럼 많은 경우에 SQLite가 적합하다고 생각합니다.

데이터 사용량이 많지 않다면 큰 문제입니다.
JeffO

@ Jeff O : 그렇습니다. 사용자 수가 상대적으로 적고 (<10-15) 총 데이터 양이 많지 않은 경우에만 SQLite를 선택합니다. 우리의 경험에 따르면 전체 데이터베이스 크기는 종종 300-400MB이며 거의 1GB를 넘지 않습니다.

1

데이터베이스의 문제점은 점점 더 많은 데이터를 축적하는 경향이 있다는 것입니다. 경량 DB를 선택하면 도구가 제대로 확장되지 않을 위험이 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.