응용 프로그램이 로컬로만 작업하는 경우 데이터베이스 서버 사용이 의미가 있습니까?


41

기본적으로 시스템에서 로컬로 실행되는 응용 프로그램 소프트웨어 인 일부 응용 프로그램을 보았습니다 (따라서 네트워크를 통해 많은 통신을하지 않음). 이러한 응용 프로그램은 데이터를 저장하기 위해 데이터베이스 서버에 의존하는 것 같습니다.

응용 프로그램의 예로는 Amarok (Linux에서 인기있는 음악 플레이어)가 있습니다. 나는 그들이 여전히 이것을하고 있는지 모르겠지만, Amarok을 설치한다는 것은 MySQL 서버를 설치하고 항상 백그라운드에서 실행해야한다는 것을 의미합니다.

sqlite와 같은 더 작은 임베디드 SQL 솔루션을 사용하는 것과 비교하여 로컬 스토리지에 서버를 사용하면 어떤 이점이 있습니까? 나는 일반적으로 응용 프로그램 소프트웨어에 대해 이야기하고 있습니다. 데이터베이스 서버를 사용하는 것이 임베디드 데이터베이스와 비교하여 의미가있는 상황이 있습니까?


4
데이터베이스를 갖는 것이 매우 중요 할 수 있습니다. 프로세스 내 데이터베이스 또는 별도의 프로세스 데이터베이스를 갖는 것이 구현 선택 / 세부 사항입니다.
9000

2
나는 이해. 문제는 로컬 응용 프로그램의 프로세스 내 데이터베이스 (SQLite와 같은) 대신 별도의 프로세스 데이터베이스 (mysql 서버와 같은)를 선택하는 이유에 대한 것입니다.
9a3eedi

답변:


29

SQLite는 그것을 사용하거나 사용하지 않을 때에 대한 훌륭한 요약을 제공합니다.

https://www.sqlite.org/whentouse.html

이 요약 줄은 내 경험에서 SQLite 사용 사례를 매우 잘 보여줍니다.

SQLite는 클라이언트 / 서버 데이터베이스와 경쟁하지 않습니다. SQLite는 fopen ()과 경쟁합니다.

이 시점에서 기사가 확장됩니다. 또한 "클라이언트 / 서버 RDBMS가 더 잘 작동 할 수있는 상황"섹션이 있습니다. 간단히 말해서, 그들은 :

  • 클라이언트 / 서버 응용 프로그램 : 네트워크를 통한 여러 사용자.
  • 대용량 웹 사이트 : 샤딩이 필요할 정도로 쓰기 집중적이거나 집중적으로 읽습니다.
  • 매우 큰 데이터 세트 : 하나의 디스크에 합리적으로 저장할 수있는 것보다 큽니다.
  • 높은 동시성 : 특히 동시 쓰기

@ 9a3eedi : 실제로 그 4 가지 지점 중 로컬 스토리지와 결합 된 전체 데이터베이스 서버가있는 시나리오를 설명하는 것은 없습니다 (특히 처음 두 가지는 그와 정반대입니다). 대답은 원래 질문에 맞지 않습니까? 그건 그렇고, 나는이 대답을 정확히 그런 이유로 downvote에게주었습니다.
Doc Brown

@DocBrown : 당신이 특정 경우에 해야 클라이언트를 사용하여이 / 서버 RDBMS는 [참조 응답]입니다; 다른 모든 SQLite는 잘 작동합니다. 확실하지 않은 내용이 확실하지 않으므로 필요한 경우 답변을 자유롭게 수정하십시오.
Denis de Bernardy

원래 질문은 응용 프로그램이 로컬에서만 (제목에서 인용) 또는 로컬 저장 소용 서버 (질문에서 인용)를 사용하는 경우 ac / s 데이터베이스가 의미 가있는 특정 사례에 관한 입니다. 위의 네 가지 시나리오는 그와 정확히 반대 (첫 번째 두 가지)이거나 "로컬"시나리오 (두 번째 두 가지)와 매우 유사하거나 드문 경우입니다. 그래서 당신이 쓴 것은 잘못이 아니지만 질문에 맞지 않습니다.
Doc Brown

@DocBrown-짧은 대답은 크기가 큰 데이터 세트를 처리하거나 동시 쓰기가 필요한 경우가 아니라면 의미가 없습니다 . (또는 명백한 이유로, SQLite가 제공하지 않는 것이 필요합니다.) 다시 말하지만, 그 점이 확실하지 않으면 대답을 자유롭게 편집하십시오.
Denis de Bernardy

글쎄, 그 목록이 완전하다고 생각하고 (로컬 시나리오의 경우 C / S DB 서버 사용이 의미가 없다는 숨겨진 진술을하면) 동의하지 않으며 개선 할 수 없다고 생각합니다. 설명을 추가하여 답변.
Doc Brown

28

단일 사용자가있는 단일 시스템의 경우에도 "실제"데이터베이스 서버가 적합합니다.

  1. 익숙한 언어 ( SQL )를 사용합니다. SQLite 는 SQL을 사용하지만 일부 내장 데이터베이스 (예 : object database , NoSQL )는 SQL을 사용하지 않습니다. 그것들은 덜 일반적이기 때문에 학습 곡선이 더 높은 경향이 있습니다.
  2. SQLite와 같은 제품이 제공하지 않거나 적어도 전체를 제공하지 않을 수있는 참조 무결성, 제약 조건, 트리거 등을 제공합니다.
  3. 진정한 다중 사용자 ACID 호환 네트워크 데이터베이스를 대상으로함으로써 응용 프로그램은 단일 사용자 / 단일 워크 스테이션 시나리오에서 작업하거나 동일한 코드베이스를 사용하는 다중 사용자 호스팅 응용 프로그램으로 작업 할 수 있습니다.
  4. 사용자는 표준 도구 (예 : SQL Developer, MySQL Workbench, SQL Server Management Studio)를 사용하여 오프라인으로 데이터를 검사하고 해당 도구를 사용하여 데이터를로드 또는 백업 할 수 있습니다. 유형, 사람들은 아마도 C / S 데이터베이스 세계의 도구에 더 익숙 할 것입니다.

주요 단점은 데이터베이스 서버 소프트웨어를 설치하고 유지 관리해야하는데, 이는 기술이 아닌 사용자 (및 많은 기술 사용자)에게는 약간 복잡합니다. Linux와 같은 운영 체제를 사용하면이 작업이 더 쉬워집니다. Linux 시스템에서 PostgreSQL 및 MySQL을 실행하고 있습니다. 나는 상호 작용이 거의 없거나 전혀없는 응용 프로그램을 설치했습니다.


9
실제로, 전체 SQL 지원, 참조 무결성, ACID, 저장 프로 시저가있는 하나의 데이터베이스 시스템 (예 : Sybase SQL Anywhere)이 있으며, 로컬 구성에서 실행될 때 서버 설정 또는 서비스 설치가 필요 하지 않습니다 . 다중 사용자 환경을위한 설정). 이 속성을 가진 다른 데이터베이스 시스템을 모르는 사람이 있다면 알고 싶습니다.
Doc Brown

3
@DocBrown IIRC MS SQLServer Compact 는 dll 형태로 제공되므로 LocalDB가 더 나은 선택 일 수 있습니다. 관리자 권한이 필요하지만 서비스로 설치할 필요는 없습니다.
gbjbaanb

5
응답에서 이미 언급 한 궁금한 SQLite를 제외하고 단점 유효성 논의에 추가하기 위해 많은 비 SQL 데이터베이스 및 데이터베이스와 같은 시스템 (예 : OrientDB, Solr 등) 은 전용 임베딩 지원 기능이 있습니다.
mikołak

14
SQLite는 참조 무결성 (켜져 있어야하지만) 및 기본 제약 조건을 제공합니다. 올바르게 사용하면 대부분의 서버보다 훨씬 빠릅니다. 서버와 비교할 때 가장 큰 단점은 단일 작성자라는 것입니다.
Jan Hudec

2
@DocBrown : Firebird의 내장 데이터베이스는 참조 무결성, ACID 보증, 저장 프로 시저 및 트리거를 포함하여 완전한 SQL 지원을 제공합니다. 임베디드 데이터베이스에 대한 여러 동시 연결을 지원하는 데 사용되지 않았으며 해당 제한이 여전히 있는지 여부는 확실하지 않지만 전체 SQL 기능 세트가 있습니다.
메이슨 휠러

21

관성과 관련이 있다고 생각합니다.

Amarok은 1997 년의 XMMS를 기반으로합니다. 우수한 데이터베이스 기능 을 갖기 위해서는 서버가 있어야하는데, 이는 파일 기반 솔루션보다 훨씬 강력했기 때문입니다.

SQLlite와 같은 좋은 로컬 임베디드 데이터베이스 의 다가오는 인기는 최근에 나온 것입니다.


내가 기억 한 바에 따르면 AmaroK 1 (XMMS를 기반으로 한)은 데이터베이스 서버에 의존하지 않았습니다. Amarok 2는 KDE4와 함께 출시되어 종속성을 소개했으며, 당시 MySQL을 설치하고 백그라운드에서 계속 실행해야한다는 것이 매우 이상했습니다.
9a3eedi

10

가장 중요한 구별 기능은 동시성 입니다.

사용자에 대해 하나의 인스턴스에서 실행되는 응용 프로그램이 하나만있는 경우 임베디드 솔루션 (sqlite 또는 일부 객체 스토리지)이 일반적으로 정상입니다.

그러나 데이터베이스를 동시에 조작해야하는 인스턴스가 여러 개인 경우 동기화 할 서버가 있어야합니다. SQLite는 전체 데이터베이스에서 한 번에 하나의 쓰기 만 허용하며 대부분의 다른 임베디드 솔루션도 허용합니다. 또한 여러 응용 프로그램이있는 경우 임베디드 솔루션이 일반적으로 허용하지 않는보다 자세한 제약 조건이 필요할 수 있습니다.


5

다른 많은 답변은 동시성에 대한 이점을 말하지만 db가 서버로 실행되므로 데이터베이스는 응용 프로그램을 실행할 필요없이 작업을 실행할 수 있습니다. 유지 관리, 백업, 다른 서버와의 동기화 또는 예약 된 작업 중 하나 일 수 있습니다.

앱이 클라이언트 / 서버 앱으로 전환 될 수 있다고 생각되면 RDBMS를 나중에 포팅하는 대신 처음부터 시작하는 것이 좋습니다.

주어진 예제가 이것을 활용하는지 여부는 알 수 없습니다.


2

메모리와 CPU가 적은 임베디드 시스템을 실행하지 않는 한 백그라운드에서 서버를 실행하면 아무런 해가 없다고 생각하지 않습니다.

데이터베이스 서버를 로컬로 실행하는 것이 좋습니다. 데이터베이스는 데이터를 액세스하고 조작하기위한 것입니다. 네트워크 액세스는 플러스이거나, 필요하거나 필요하지 않을 수 있습니다. 이를위한 몇 가지 엔지니어링 및 과학 도구가 있습니다.

로컬 애플리케이션에서 데이터를 사용한다고 가정하십시오. 왜 데이터베이스를 사용해서는 안됩니까? 무엇과 반대로?


만약 일반 사용자 (AmaaroK와 같은 음악 플레이어)에게 응용 프로그램을 배포한다면, MySQL 서버를 설치하고 백그라운드에서 실행하는 것은 시스템 요구 사항의 일부가 아니며 사용자가 할 수있는 일이라고 생각합니다 좋아하지 않는. 그러나 그것은 응용 프로그램에 달려 있다고 생각합니다. 이것은 SQLite와 같은 것을 사용하는 것과 반대입니다.
9a3eedi

2

데이터 추상화 및 전체 응용 프로그램 공간, 액세스 관리 요구 사항, 데이터 유지 관리에 대한 투자 계획, 필요한 프로토 타입의 긴급 성, 학습 곡선에있는 위치 등에 따라 다릅니다.

다른 응용 프로그램에서 액세스 할 필요가없는 응용 프로그램에 대해 긴밀하게 통합 된 데이터베이스를 유지하려면 포함 된 데이터베이스 영역을 만드십시오. SQLite를 사용한 Mozilla Firefox 웹 스토리지 구현을 예로들 수 있습니다.

제한된 데이터로 더 많은 효율성이 필요한 경우, 인 메모리 데이터베이스의 디자인 선택이 바람직합니다.

반면에 동일한 데이터에 대해 여러 쿼리를 실행하는 많은 응용 프로그램이 있고 성능을 최적화하기 위해 더 나은 데이터 저장소 구성이 필요한 경우 중앙 집중식 DBMS가 필요합니다. 방대한 양의 데이터가 필요하고 쿼리 응답 시간이 전반적인 사용자 경험에 큰 영향을 미치는 과학 연구에는 절대적으로 선호합니다.

Amarok의 경우, 임베디드 데이터베이스의 경로를 선택하기 전에 당시 오픈 소스 DBMS를 선택했다고 생각합니다.

당신의 손에 특정 시스템 정의가 있다면, 단점과 전문가의 가중치를 매기는 것이 더 쉬울 것입니다.

V / r, 우 무트

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