대규모 데스크톱 응용 프로그램에서 SQL이 널리 보급되지 않은 이유는 무엇입니까?


28

저는 소프트웨어 개발자로서 작은 집에서 만든 앱에서 중소 기업 응용 프로그램에 이르는 프로젝트를 수행했습니다. 거의 모든 프로젝트에서 데이터베이스 를 사용하거나 처음부터 데이터베이스 를 사용하지 않는 것을 후회했습니다.

이제 데이터베이스와 일반적인 응용 프로그램에서의 사용법에 대해 몇 가지 궁금합니다.

  • Windows 자체가 "중앙"SQL 데이터베이스를 사용하지 않는 이유는 무엇입니까? 예를 들면 다음과 같습니다.
    • 오류보고 데이터는 여러 파일에 저장됩니다.
    • Windows Update는 모든 것을 플랫 파일로 저장합니다.
    • 아이콘 캐시는 SQL 등을 통해 액세스되지 않는 매우 이상한 단일 파일에 저장됩니다.
  • 왜 이렇게 많은 대규모 응용 프로그램이 데이터베이스 사용을 피합니까? 예를 들어, Microsoft Outlook은 .pst 파일에 대한 자체 형식을 갖고 레지스트리에 일부 데이터를 저장하여 휠을 재창조하는 대신 실제 데이터베이스를 사용하여 얻지 못합니까?

데이터베이스가 전체적인 복잡성과 추가적인 성능 손실의 추가 계층을 추가하는 경우, 특히 큰 이진 대신 작은 조직화 된 데이터 청크의 저장과 관련하여 대부분의 환경에서 코드를 단순화하는 데 큰 이점이 있습니다. 시냇물. 그렇다면 실제로 데이터베이스를 사용하는 제품이 왜 적은가? 아마도 내가 실제로 Sqlite 데이터베이스를 사용하는 유일한 응용 프로그램은 Firefox이고 아마도 Microsoft Exchange 일 것입니다 (그러나 마지막 응용 프로그램은 데스크톱 응용 프로그램이 아닙니다)?

또한 Microsoft Office 또는 Microsoft Expression과 같은 일련 의 응용 프로그램은 통합 된 SQL 데이터베이스 를 사용하여 응용 프로그램을보다 쉽게 ​​배포하고, 데이터를 업데이트 / 업그레이드하고, 해당 응용 프로그램간에 데이터를 공유하고, 백업을 수행 할 수 있는 이점 이 있습니다. 등?


4
자신의 플랫폼에 대해 이야기하십시오. ;) 많은 Mac / iPhone 앱은 일반적으로 SQLite 데이터베이스를 사용하여 저장하는 CoreData를 사용합니다.
mipadi

8
데이터베이스는 또한 "파일 묶음"입니다. 제시 한 모든 예제는 실제로는 쿼리 가능한 관계형 데이터베이스가 아니라 실제로 데이터베이스라고 주장합니다.
Allon Guralnek

8
데이터베이스는 관계형 데이터베이스를 의미합니다.
Olivier Jacot-Descombes

답변:


20

1) 일반적으로 전체 RDBMS를 실행하는 오버 헤드가 너무 커서 시스템에 불필요하게로드가 걸리고 복잡해집니다.

하나를 설치하면 개발자로서의 삶이 더 쉬워 지지만 기계가 느리게 실행되고 더 많은 문제가 발생하기 때문에 기계 소유자의 생활이 악화됩니다. 개발자 대 사용자 대결에서 사용자는 거의 항상 승리해야합니다.

2) 많은 데이터 저장소에는 SQL Server Express와 같은 특정 요구 사항이 충족되지 않습니다.

예를 들어, 가능한 가장 간단한 방법으로 오류 로그를 작성하여 쓰기가 발생하고 데이터를 사용할 수있는 가능성을 최대화해야합니다. SQL Server는 결코 그렇게 단순하지 않을 것입니다.

보다 복잡한 응용 프로그램의 경우 인수는 매우 구체적인 사용자 사례를 최적화하는 경향이 있습니다. 플랫 파일은 매우 빠릅니다.


5
나는 그가 전체 서버를 설치 해야하는 종류의 데이터베이스를 의미한다고 생각하지 않습니다. SQLite는 서버없이 작동하며 오픈 소스 응용 프로그램에서 널리 사용됩니다.
laurent

@Laurent-만약 그가 그렇지 않다면 왜 아래의 SQL Lite 답변을 받아 들일 수 있었을 때 그것을 왜 대답으로 표시 했습니까?
존 홉킨스

30

많은 응용 프로그램에 SQLite가 포함되어 있습니다 . 그들의 웹 사이트에서 인용 :

SQLite는 자체 포함 된 서버리스 구성없는 트랜잭션 SQL 데이터베이스 엔진을 구현하는 소프트웨어 라이브러리입니다. SQLite는 세계에서 가장 널리 배포 된 SQL 데이터베이스 엔진입니다. SQLite의 소스 코드는 공개 도메인에 있습니다. "

사용 가능한 API 중 하나를 사용하고 데이터베이스, 테이블 등을 작성하면 SQL 엔진이 모든 것을 이진 파일로 저장하여 사용자 파일 시스템의 어느 곳에 나 넣을 수 있습니다. 무엇보다도 FLOSS입니다.


23

Windows는 ESE (Extensible Storage Engine) 라는 데이터베이스 엔진과 함께 제공됩니다 .

ESE 는 다른 많은 Windows 서비스 및 응용 프로그램 중에서 Active Directory, Exchange Server, Windows Mail 및 데스크톱 검색에서 사용됩니다.

개발을 위해 오픈 소스 ESE 래퍼가 있습니다.

모든 최신 버전의 Windows와 함께 ESE가 제공되므로 데이터베이스 배포 문제가 없습니다. 아키텍처 상 ESE는 SQLite와 같은 내장 데이터베이스와 유사한 역할을 수행합니다.


이 기능을 홍보하지 못한 것 같습니다. 90 년대 이래로 Microsoft 기술을 거의 독점적으로 개발해 왔는데이 소식을 들어 본 적이없는 이유는 무엇입니까? 좋은 프론트 엔드가없는 것이 또 다른 이유 일 수 있습니다. Wikipedia에서 : "수년 동안이 API는 Microsoft에서만 사용하는 개인 API 였지만 이후 누구나 누구나 사용할 수있는 공개 API가되었습니다." 또한 "JET Blue API는 Windows 내외에서 점점 더 많은 수의 응용 프로그램과 서비스를 통해 사용을 촉진하기 위해 2005 년에 발표되었습니다."
Mike는 Monica를 지원합니다.

8

관계형 데이터베이스는 모든 도메인에서 가장 효율적인 데이터 구조는 아닙니다. 많은 데스크톱 응용 프로그램은 내장 데이터베이스를 사용하므로, 데이터 파일이 모두있는 경우 데이터베이스를 사용 중인지 쉽게 알 수 없습니다.


요점은 : 왜 SQL이 아닌 내장 데이터베이스 또는 Microsoft Outlook과 같은 자체 외계 이진 형식 대신 Microsoft SQL Server (Express? 또는 모든 Windows 플랫폼에 사전 설치된 단일 로컬 호스트 SQL Server의 특수 라이센스?)를 사용하지 않는 이유는 무엇입니까? ?
Arseni Mourzenko

그가 말했듯이 SQL은 모든 것에 최적이 아닙니다. 많은 응용 프로그램 별 데이터 저장소는 한 작업에 대해 고도로 최적화되어 결과적으로 설치 공간이 적은 SQL보다 빠릅니다.
Jon Hopkins

3
@MainMa : 이제 추가 종속성을 추가했습니다. 사용자가 SQL Server를 설치하고 실행해야합니다. 이것은 사소한 것이 아닙니다. 모든 로컬 컴퓨터에 특수 로컬 호스트 SQL Server가 사전 설치되어 있으면 다를 수 있지만 실제로는 그렇지 않습니다.
David Thornley

SQLServer Compact는 설치하기 쉽습니다. 몇 개의 파일 만 복사하면됩니다.
MarkJ

7

Windows 자체가 "중앙"SQL 데이터베이스를 사용하지 않는 이유는 무엇입니까?

실제로이 아이디어는 Microsoft에서 한동안 개발되어 왔습니다. 이를 WinFS 라고 합니다. 흥미로운 기술이며 MSDN 가입자에게 제공됩니다. 언젠가는 VM에 VM을 설치하고 함께 사용할 것입니다.


2
나는 아직도 PC를 사용하는 방법을 알고 있었을 때 WinFS가 당시 롱혼의 "다음 큰 것"인 것을 기억한다. :-)
Denis de Bernardy 2016 년

6

데이터베이스는 유연성을 제공하며 모든 기능과 마찬가지로 거의 확실히 비용이 발생합니다. 플랫 파일이 작동하면 임시 보고서와 같이 예상치 못한 방식으로 데이터를 쿼리 할 필요가 없다고 가정 할 수 있습니다.

데이터베이스는 또한 여러 연결 / 입력을 처리하는 데 효과적입니다. 다시 말하지만 이것이 데스크톱 앱에 필요하지 않은 이유는 무엇입니까? 사용자 인터페이스 / 실제로 Outlook 자체 설치를 제외하고 얼마나 많은 다른 응용 프로그램이나 사용자가 컴퓨터의 Outlook 파일에 쓰려고합니까?

"SQL과 같은 단일 언어에 적합한 방식으로 모든 데이터를 쿼리 할 수 ​​있기를 원합니다"라는 관점에서 모든 데이터가 관계형 데이터베이스에 있으면 더 쉬울 수 있지만 많은 응용 프로그램에서 우선 순위는 거의 없습니다.

대부분의 프로그래머는 다음을 살펴볼 것입니다.

  • 앱이 무엇을해야하는지 알고 있습니다.

  • 내 앱은 이러한 데이터에 액세스하거나 조작 할 수있는 유일한 정보입니다

  • 내 디자인의 간단한 파일 구조가 작동합니다.

  • 적어도 하나의 응용 프로그램의 경우 다른 사람들의 코드에 의존하지 않고 완전한 제어 권한을 갖기를 원합니다.


1
+1. 당신이 옳습니다 : 데스크톱 응용 프로그램 (대부분의 경우)에 대한 다중 연결이 없으므로 SQL 데이터베이스의 이점이 줄어 듭니다.
Arseni Mourzenko
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.