데이터베이스 사용시기를 결정하는 가장 좋은 방법은 무엇입니까?


13

PHP와 MySQL을 사용하여 웹 개발에서 프로그래밍 경력을 시작했습니다. 나는 대부분의 동적 데이터와 일부 설정 / 매개 변수 데이터를 저장하기 위해 db를 사용하는 데 익숙해졌습니다. 때로는 많은 데이터가있을 수 있지만 다른 경우에는 테이블의 항목이 적을 수 있습니다. 나에게 이것은 자연스럽게 보였고 내가 아는 한 이것은 웹 개발에서 허용되는 접근 방식입니다. (내가 틀렸다면 나를 정정하십시오 ...)

나는 지금 데스크톱 응용 프로그램을 탐구하고 있으며 내 자연적인 성향은 db를 다시 사용하여 응용 프로그램 사용을 통해 생성되는 많은 정보를 저장하는 것입니다. 그러나 내가 알 수있는 한 db를 자주 사용하는 응용 프로그램 (사용하는 응용 프로그램)이 보이지 않습니다. [편집 : 많은 응용 프로그램이 프로그램 자체에 포함 된 경량 데이터베이스를 사용한다는 점에서 이것은 잘못된 가정이라고 지적되었습니다.] 그 이유는 무엇입니까? db를 사용하는 것이 어느 시점에 적절한가요? 이 문제에 대한 표준이 있습니까? 또한 데스크탑 애플리케이션을 개발하기 위해 db를 사용하지 않는 이유는 무엇입니까?


2
"그러나 내가 알 수있는 한 db를 자주 사용하는 응용 프로그램 (사용하는 응용 프로그램)이 보이지 않는다"고? 무엇을 기반으로? 그들이 SQLite를 사용한다면 데이터베이스를 사용하고 있는지 아닌지를 어떻게 알 수 있습니까?
S.Lott

그렇기 때문에 내가 잘못했을 가능성이 있다는 것을 알 수있는 한 말할 수있었습니다. 임베디드 DB를 사용하는 일부 앱이있을 수 있다고 생각했습니다 ... 앱이 DB를 사용하는 것이 일반적입니까?
Kenneth

@ 케네스 : SQLite와 같은 임베디드 DB는 Google에 문의하십시오. 많이있다. 그들은 널리 사용됩니다. Apple의 iOS 인 AFAIK는 모든 지속성을 위해이를 사용합니다 . Google에 문의하십시오.
S.Lott

2
나는 구글을 많이합니다. 때로는 인터넷 검색을 찾을 수없는 숙련 된 의견을 대체 할 수는 없습니다.
케네스

1
이러한 의견은 잘못된 가정을 바로 잡기에 충분하다고 생각합니다. 오류로 사과드립니다. 나는 인터넷 검색과 질문을 건강하게 혼합하여 사용한다고 생각합니다. 후자의 IMHO를 대체 할 수없는 경우도 있습니다. 이제 내 인터넷 검색이 더 잘 안내되고 생산성이 높아집니다.
Kenneth

답변:


4

응용 프로그램이 문서 지향적이라면 문서 파일에 저장하십시오.

응용 프로그램이 XML 문서와 같은 단일 문서에 대해 더 많은 구조화 된 데이터를 처리하는 경우 데이터베이스를 사용하십시오.


7

데이터베이스 시스템은 전통적으로 비교적 무거운 서비스로 여겨져 왔으며, 모든 클라이언트 시스템에 반드시 설치하고 싶지는 않았습니다. 실제 DB 시스템이 "이상적인"솔루션이었던 상황 (실제로 많은 데이터를 저장해야하는 데스크톱 GUI 앱 개발)에 처해있었습니다. 대신 플랫 데이터 파일을 사용했습니다.

요즘에는 약간의 가벼운 데이터베이스가 있지만 클라이언트 쪽 데이터베이스에 대한 유효한 주장입니다. 수십 가지 설정과 매개 변수를 저장해야하는 간단한 작은 데스크탑 앱 (예 : 간단한 데스크탑 장난감이나 게임)을 상상해보십시오. 앱을 실행하기 위해 사람이 MySQL을 설치하게하는 것이 맨 위에있는 것처럼 보입니다.

웹 개발을 통해 서버는 당연히 백엔드이며 데이터베이스를 보유하는 것은 당연합니다. 예. 사용자는 마지막에 데이터베이스를 설치하는 것에 대해 걱정할 필요가 없습니다.


따라서 대량의 데이터가 실제로 그것을 보증하지 않는 한 독립형 앱에는 db를 사용하지 않는 것이 좋습니다.
Kenneth

경량 DB를 사용하는 것에 대한 당신의 생각은 무엇입니까?
Kenneth

1
@ 케네스 : 나는 "의존한다"고 말할 것입니다. 앱이 실제로 적절한 DB에 있어야하는 대량의 테이블 형식 데이터를 요구하는 경우이 인수는 앱을 경량 DB와 함께 제공하기에 충분할 수 있습니다. 그러나 구성 / 설정 종류의 데이터라면 과잉 일 것입니다.
바비 테이블

5

데스크톱 응용 프로그램은 실행중인 상태를 유지합니다. 웹 개발은 일반적으로 그렇지 않습니다. 따라서 페이지로드 사이에 데이터베이스에 사용자 설정을 저장해야 할 수도 있지만 데스크톱 앱에서는 메모리에 유지합니다. 따라서 이러한 유형의 영구 스토리지에 대한 필요성이 크게 줄어 듭니다. 사용간에 환경 설정을 저장하려는 경우 모든 파일을 하나의 파일로 저장하거나 Windows 레지스트리와 같은 곳에 둘 수 있습니다.

즉, 데이터베이스 시스템은 데스크톱 앱에서 상당히 많이 사용됩니다. 웹이 나오기 오래 전에 데스크톱 응용 프로그램이 DBMS에 연결되었습니다. 주로 문서 기반이 아닌 응용 프로그램에 적합합니다. 요즘에는 경량 엔진을 더 잘 사용할 수 있기 때문에 선이 약간 흐려져 있습니다. 예를 들어, 나는 내 응용 프로그램 중 일부에서 SQLite DB 문서 사용 합니다.


+1 다중 사용자, 다중 위치, 동시 차단 업데이트와 같이 복잡한 지속성 문제가없는 경우 기존 데이터베이스가 과도하게 소모 될 수 있습니다. 문제가되는 데이터가 상당히 정적 인 경우 (증가하거나 추가 될 수 있지만 진화하거나 업데이트되지 않는 경우), 경합 / 경쟁이 빈번하지 않거나 왜곡되지 않는 경우 (자유 잠금을 기다리는 데 따른 부작용 / 사용자 경험) 성능 및 복잡성 트레이드 오프를 고려할 수없는 경우) 데이터베이스가 필요하지 않을 수 있습니다.
JustinC

4

실제로 살펴보고 싶은 것은 실제로 실행중인 데이터베이스 서비스가 필요없는 경량 데이터베이스입니다. 예를 들어, Microsoft 앞에는 SQL Server Compact 가 무료이며 데이터베이스 용 단일 파일과 앱에 추가 된 일부 DLL 만 필요하며 개발자의 관점에서는 "실제"SQL Server와 거의 같은 방식으로 작동합니다.

다른 플랫폼에서도 비슷한 옵션이 있습니다.


1
Java 측면에서 매우 유사한 예는 Derby입니다. 나는 다른 사람들도 있다고 생각합니다.
jprete

1
이상적인 솔루션 일 것 같습니다 ... db를 사용하는 것이 정말 좋습니다! lol
케네스

경량 DB를 사용하는 데 단점이 있습니까?
Kenneth

@Kenneth : 설치 규모를 늘리고 코드베이스를 늘릴 수 있습니다. 그러나 이는 클라이언트에 전체 데이터베이스 서버를 설치하는 것보다 훨씬 적습니다. 이는 일반적으로 응용 프로그램이 배포되고보다 실질적인 데이터베이스가 필요한 경우에만 수행됩니다. 버클리 DB는 가장 일반적으로 사용되는 중 하나입니다.
Orbling

또 다른 옵션은 SQLite인데, RAM과 디스크 공간 모두에서 훨씬 가볍고 임의의 제한이 없습니다. MS 이외의 모든 스마트 폰과 웹 브라우저에서 사용되는 것은 놀라운 일이 아닙니다.
Javier

2

웹 응용 프로그램에서는 중앙 집중식 저장소에 영구 상태를 저장하는 것이 중요합니다. 웹 앱은 일반적으로 첫 번째 병목 현상이므로 데이터가있는 사본 ( '공유 없음'원칙)에 의문을 제기하지 않고 배포 할 수 있어야합니다. 데이터베이스뿐만 아니라 memcached큐 시스템도 같은 이유로 존재합니다.

데스크톱 앱의 확장 성 목표는 동일하지 않습니다. 일반적으로 대부분의 데이터는 각 워크 스테이션에 로컬로 저장됩니다. 대부분의 경우 데이터 공유는 다른 문제입니다. 데이터베이스를 사용해야하는 큰 이유가 하나도 없습니다.

GUI 응용 프로그램은 메모리에 복잡한 웹 개체로 취급 될 수있는 복잡한 문서를 가질 수도 있습니다. 구조를 관계형 DB 스키마로 정규화하면 문제가 상당히 복잡해 지지만 때로는 전체를 단일 바이트 스트림으로 직렬화하는 것이 더 쉽습니다. 많은 OOP 프레임 워크에는이를위한 몇 가지 기능이 포함되어 있습니다.

그럼에도 불구하고, 주요 응용 프로그램 외부의 도구를 사용하여 저장된 문서를 읽을 수있게하는 것은 많은 경우에 큰 이점입니다. 따라서 사람이 읽을 수있는 형식 (XML, JSON, YAML 등)을 사용하거나 여러 개의 간단한 조각을 합친 zip 파일이 점점 더 많아지고 있습니다. 더 일반적입니다.

같은 맥락에서, 임베디드 데이터베이스 라이브러리 (BDB, Tokyo Cabinet, SQLite, MS-SQL * server Compact 등)를 사용하는 것도 또 다른 훌륭한 접근법입니다.


1

데이터베이스는 과잉이 될 수 있지만 일반적으로하지 않습니다 될 수 있습니다. 매우 간단한 프로그램은 필요하지 않습니다. 문서가 사소한 시간에 메모리에로드되어 문제없이있을 수있는 경우 실제로 많은 프로그램을위한 문서가 필요하지 않습니다.

예를 들어 다음을 고려하십시오.

#include "superheader.h"

int main()
{
    int row=2, column=2;
    DatabaseType db;
    db.ConnectTo("programDB", "user", "pass");
    db.setTable("messages");
    string hello_world=db.fetch(row, column);
    cout<<hello_world;
    return 0;
}

글쎄요, 그것은 지나치게 단순하지만 분명히 이것은 너무 많습니다. "Hello World"에 대해 데이터 관리 수준을 높일 필요는 없습니다.

일반적으로 필자가 경험하는 규칙은 많은 데이터 집합 이있는 경우 데이터베이스를 사용하는 것 입니다. 특히 고유하게 다른 경우 또는 데이터 의 이 상당히 많은 경우 데이터베이스를 사용하는 것입니다. 일반적으로 데이터베이스는 약간의 오버 헤드와 관련이 있지만 실제로는 많지 않은 것이 많습니다. 예를 들어 작고 가벼운 인 메모리 데이터베이스는 처리량이 많거나 일정이 잡히거나 데이터에 대한 동적 변경이 많은 소규모 프로젝트에 유용합니다.

다양한 코딩 스타일이 있으며 데이터베이스에는 아무런 문제가 없지만 대부분의 경우 기본 작업에 대해서는 그다지 멀지 않습니다. 올바른 데이터베이스가 성능상의 이점을 제공 하는 다른 경우가 여전히 있습니다 . 데이터의 위치, 데이터 보유 기간 및 수명 기간 동안 변경되는 데이터의 차이점을 특히 이해하십시오.


1

db를 사용하는 것이 항상 옳은 일이며 SQLite를 구현하지 않으면 실제로 모든 언어에 대해 SQLite 구현을 사용하는 것은 디자인 의사 결정이 좋지 않습니다. 사용하지 않는 유일한 이유는 임베디드 프로그래밍이나 다른 유형의 비 응용 프로그램 형태의 프로그래밍을 수행하는 경우입니다. SQL과 같은 선언적 언어로 데이터 및 설정을 쿼리하는 것은 명령 구문을 사용하여 메모리의 플랫 파일 또는 기타 개체를 탐색하는 것보다 훨씬 자연 스럽습니다. 또한 데이터 작업을 다른 응용 프로그램 코드와 완전히 분리하여 장기적으로 코드를 모듈화하고 유지 관리 할 수있게합니다.

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