데이터 구조를 사용하는 알고리즘과 데이터베이스를 사용하는 알고리즘의 차이점은 무엇입니까?


10

일반적인 질문

데이터 구조를 사용하는 알고리즘과 데이터베이스를 사용하는 알고리즘의 차이점은 무엇입니까?

일부 상황

이것은 한동안 나를 괴롭힌 질문이며, 그것에 대한 설득력있는 대답을 얻을 수 없었습니다.

현재 데이터 구조와 관련이 많은 알고리즘에 대한 이해를 높이기 위해 노력하고 있습니다. 이들은 Bag, Queue, Stack, Priority Queue 및 Heap과 같은 기본 구조입니다.

또한 매일 데이터베이스를 사용하여 최종 사용자가 처리 및 제출 한 데이터 또는 프로그램에서 처리 한 데이터를 저장합니다. 데이터베이스의 테이블을 기반으로 생성되는 자체 데이터 구조를 가진 DAL을 통해 데이터를 검색하고 제출합니다.

데이터베이스를 사용하여 데이터를 정렬하여 오름차순 / 내림차순으로 주문한 데이터를 다시 보내거나 논리로 데이터를 검색 및로드하고이 데이터를 우선 순위 대기열에서 처리하고 힙 정렬하는 옵션이있을 때 질문이옵니다. 그것의 모든. 또는 다른 하나는 레코드의 하위 집합을로드하지 않고 이진 검색과 같은 것을 사용하여 관심있는 레코드를 찾는 대신 데이터베이스를 사용하여 레코드를 검색하는 것입니다.

내 생각에는 통신 비용이 많이 들기 때문에 데이터베이스 엔드를 보내기 전에 데이터베이스 엔드에서 많은 작업을 수행하려고합니다. 또한 데이터베이스보다 데이터를 처리하기보다는 자체 로직 내에 엄격하게 정의 된 알고리즘 및 데이터 구조를 언제 사용하는지 궁금합니다.

여기 질문이 있습니다 ...

질문

  1. 데이터 구조와 데이터베이스의 차이점은 무엇입니까?
  2. 데이터베이스 자체가 아닌 사용자 자신의 논리 내에서만 정의 된 데이터 구조를 사용하는 알고리즘을 언제 사용합니까?
  3. @Harvey post : 데이터베이스의 메소드는 언제 자신의 로직의 메소드보다 사용하기에 덜 효율적입니까?
    • @mirculixx post : 어떻게 메소드를 효율적으로 만드는가?
  4. @Harvey post : 데이터베이스에서 데이터 구조로 데이터를 처리하는 것보다 데이터 처리 속도가 어떻게 빠릅 니까?

설명

  1. @Grant post : 내가 일반적으로 사용하는 데이터베이스는 관계형이며 이러한 질문은 데이터베이스에서 작동하지 않습니다. 그러나 이러한 질문은 지속성 프레임 워크에 적용 할 수 있다고 생각합니다 (프레임 워크를 말할 때 가장 일반적인 의미입니다).

특정 상황이없는 답변은 어렵다는 것을 알고 있습니다. 생각할만한 음식, 조언 또는 토론 요점은 주로 내가 찾고있는 것입니다.


datomic.com의 데이터베이스는 기존의 관계형 것보다 사용자에게 더 가깝다. 기존 데이터베이스 만보고 있습니까?
직업

@Job 아니요, 여기서 관계형 데이터베이스 만 고려하는 것은 아닙니다. 논리의 데이터 구조와 데이터베이스 / 지속성 단위의 데이터 구조 간의 차이를 이해하는 것에 대해 자세히 설명합니다.
hulkmeister

일반적으로 말할 수 있습니다. 가능하면 데이터베이스를 사용하지만 속도가 너무 느리면 데이터 구조를 사용하십시오. 데이터 복제 (예 : 캐싱)는 둘을 동기화 상태로 유지해야하기 때문에 좋지 않습니다. 따라서 불가능한 경우가 아니면 피하십시오.
Job

정렬하기 위해 데이터베이스에만 데이터를 보내시겠습니까? 블록을 돌아 다니면서 마음을 바꾸는 것처럼?

답변:


18

데이터 구조는 대부분 다음과 같습니다.

  1. 메모리 상주,
  2. 과도 현상,
  3. 크기 제한
  4. 잠금 또는 불변성과 같은 동시성 메커니즘을 추가하지 않으면 재진입 할 ​​수 없습니다.
  5. ACID를 준수 하지 않음
  6. 신중하게 선택하면 빠릅니다.

데이터베이스는 대부분 다음과 같습니다.

  1. 디스크 바운드,
  2. 지속성 있는,
  3. 큰,
  4. 안전하게 동시
  5. 트랜잭션 기능을 갖춘 ACID 호환
  6. 데이터 구조보다 느림

데이터 구조는 한 장소에서 다른 장소로 전달되며 프로그램 내에서 내부적으로 사용됩니다. 데이터베이스를 사용하여 웹 페이지에서 웹 서버로 데이터를 마지막으로 보냈거나 메모리에 완전히 상주 한 데이터베이스에서 계산을 수행 한 시간은 언제입니까?

데이터베이스 시스템은 내부 구현의 일부로 데이터 구조를 사용합니다. 크기와 범위에 관한 문제입니다. 프로그램 내에서 데이터 구조를 사용하지만 데이터베이스 시스템 자체적으로 프로그램입니다.


웹 페이지 대 웹 서버 설명과 관련하여 데이터베이스를 사용하지 않을 것에 동의하지만 데이터베이스에 유지되도록 해당 데이터를 처리하거나 변환하는 서블릿이있을 가능성이 있습니다. 미들 티어와 데이터 티어 사이에 있으며 약간의 문제가 발생합니다. 질문을 단순화하기 위해 데이터베이스의 메소드가 로직의 메소드보다 사용하기에 덜 유용합니까?
hulkmeister 2016 년

1
그건 DAL의 빵과 버터 야, 그렇지? DAL은 개체와 데이터베이스 레코드 간 전환을 쉽게하기 위해 존재합니다. DAL은 데이터베이스로 수행하려는 작업의 약 80 ~ 90 %에 적합하지만 나머지 10 ~ 20 %에 대해서는 원시 SQL 또는 저장 프로 시저가 더 효율적이기 때문에 되돌릴 수 있습니다.
Robert Harvey

정렬 / 필터링 예제에서 데이터베이스 서버에서 이러한 종류의 처리를 수행하려는 것이 맞습니다. 그러나 대부분의 경우 데이터 형식의 형태로 처리 결과를 얻을 수 있습니다.
Robert Harvey

당신이 준 요점은 정말 유익했습니다. 그러나 데이터베이스에서 직접 또는 데이터 구조와 함께 논리 또는 둘 다에서 엄격하게 작동하는 메소드 (또는 알고리즘)에 대해서는 여전히 나에게 문제가 있습니다. 나는 당신이 내려 놓은 두 목록 중 6 번 항목을보고 있는데, 떠오르는 질문은 하나가 다른 것보다 얼마나 빠릅니까? 나는 항상 소스에서 데이터를 다루는 것이 일을 처리하는 가장 빠른 방법이라고 인식했습니다. 게시물 내에서 업데이트 할 수 있습니다. 다시 읽겠습니다.
hulkmeister

1
여러 가지 이유로 데이터베이스가 느려집니다. 캐싱에도 불구하고, 여러 테이블을 포함하는 실행 계획을 가지고 컴파일해야하는 SQL 문을 사용하여 디스크에서 데이터를 읽어야합니다. 이 과정은 훨씬 더 복잡합니다. 또한 일반적으로 와이어를 통해 결과를 전송해야하며, 여기서 데이터를 데이터 구조로 변환하여 작업 할 수 있습니다.
Robert Harvey

6

데이터 구조와 데이터베이스의 차이점은 무엇입니까?

추상 수준에는 데이터베이스 데이터 구조 인 것이 없습니다 .

특정 수준에서 데이터베이스는 일반적으로 삽입, 업데이트, 검색, 조인 또는 기타 다른 목적 (또는 조합)에 최적화 된 형식으로 데이터를 유지하려는 목적을 가지고 있습니다.

예를 들어 RDBMS의 테이블을 비교하여 데이터 배열을 말하면, 알고리즘의 런타임, 작성해야하는 코드의 양, 알고리즘을 실행하는 데 필요한 메모리의 양에 차이가있을 수 있습니다. 프로그램 / 알고리즘 외부에서 데이터를 작업 / 액세스 할 수있는 유연성

데이터베이스 자체가 아닌 사용자 자신의 논리 내에서만 정의 된 데이터 구조를 사용하는 알고리즘을 언제 사용합니까?

경향에 나는 논쟁 할 것이다

a) 특정 알고리즘의 런타임 또는 목적을 넘어 액세스 할 수있는 방식으로 데이터를 유지해야하는 경우 데이터베이스를 사용합니다.

b) 런타임 속도가 중요하거나 지속성이 필요하지 않은 경우 자체 메모리 내 데이터 구조를 사용

예를 들어, 알고리즘이 고객 레코드를 처리하는 경우 나중에 다른 프로그램 / 알고리즘에서 사용하고 완전히 다른 목적으로 (가장 중요한 고객을 찾기 위해) 해당 고객 레코드를 저장 (예 : 특정 영역에서 모든 고객 찾기) 할 수 있습니다 ). 이 경우 데이터베이스를 사용하여 데이터를 유지하는 것이 좋습니다.

그러나 성능상의 이유로 데이터를 유지하지 않아도되는 인 메모리 데이터베이스의 개념이 있습니다. 예 레디 스 또는 HANA .

데이터베이스의 메소드가 자체 로직의 메소드보다 사용 효율이 떨어지는 시점은 언제입니까?

대답은 환경과 사용중인 데이터베이스 유형에 따라 다릅니다. 나는 "어떻게 효율적인 방법을 만드는가?" 그런 다음 자신의 데이터 구조에 사용할 메소드 (= 알고리즘)와 데이터베이스에서 사용하는 메소드를 평가하는 연습이됩니다. 다음 사항도 참조하십시오.

데이터 구조가있는 데이터를 데이터베이스에서 처리하는 것보다 어떻게 빨리 처리합니까?

다시 말하지만, 이는 사양에 따라 다릅니다. 일반적으로, 알고리즘을 실행하는 프로세스에 직접 액세스 할 수있는 인 메모리의 데이터 처리는 요청을 동일한 프로세스 나 네트워크를 통해 다른 프로세스로 전송하고 결과를 다시 보내도록 요청하는 것보다 빠릅니다. . 그러나 데이터가 이미 데이터베이스 내에 존재하는 경우, 두 개의 테이블을 조인하고 일부 집계 함수를 계산하는 SQL 문과 같은 명령을 전송하고 데이터의 작은 요약 또는 서브 세트 만 검색하는 것이 먼저 모든 데이터를 전송하는 것보다 훨씬 효율적일 수 있습니다. 데이터 및 로컬로 결과 계산 (자신의 데이터 구조 사용).


1

디스크 액세스는 주로 네트워크 액세스 (http://serverfault.com/questions/238417/are-networks-now-faster-than-disks)보다이 작업에서 가장 비싼 것입니다. 데이터베이스가 1Gbps 네트워크 및 웹 \ 응용 프로그램 서버와 동일한 네트워크에 있지 않으면 큰 데이터 집합의 디스크 성능만큼 네트워크 성능이 중요하지 않습니다. 또는 데이터가 매우 빠른 솔리드 스테이트 디스크에 있으면 일반적인 네트워크 액세스보다 빠릅니다. 또한 데이터베이스가 데이터베이스가 애플리케이션 서버와 동일한 서버에있는 경우 일반적으로 데이터베이스는 TCP / IP를 사용하는 대신 명명 된 파이프와 같은 IPC 메커니즘을 제공합니다.

요청 사이의 메모리에 대부분의 enire 데이터 구조를 유지할 수 있다면 일반적으로 가장 빠른 방법입니다. 그렇게 할 수 없다면 정규화 된 테이블과 적절한 수의 인덱스를 사용하여 작은 레코드 집합 이외의 다른 항목, 특히 수백만 개의 레코드가있는 시스템에서 적절한 데이터베이스 구조를이기는 것은 어렵습니다.

관계형 데이터베이스는 일반적으로 후드 아래에서 B + 트리 또는 그 변형을 사용하며 자주 액세스하는 레코드에 대한 디스크 및 버퍼 풀의 데이터 정렬과 같은 많은 최적화를 갖습니다. 따라서 특히 집계 또는 필터링과 관련하여 대용량 데이터 세트를 신속하게 처리하는 데 탁월합니다.


내가 이걸 얻었는지 말해줘 데이터 작업에 대해 생각할 때마다 작업 세트를 메모리에 캐시 된 상태로 유지할 수 있다면 더 빠릅니다. 그렇지 않으면 데이터베이스를 사용하여 결과를 제공하거나 데이터베이스를 더 많이 쿼리하는 방법을 찾으십시오.
hulkmeister

데이터 집합이 매우 작거나 데이터베이스가 느린 네트워크의 위치에 원격이 아닌 한 @hulkmeister는 일반적으로 그렇습니다.
피터 스미스

0

데이터베이스 란 무엇을 의미합니까? MySQL 또는 SQL Server와 같은 관계형 데이터베이스를 의미합니까? 관계형 데이터베이스는 관계형 모델에 의해 정의 된 작업의 일부 하위 집합을 지원하는 메타 데이터 구조입니다 . 60 년대에 Edgar Codd가 주로 해결 한 관계형 모델 이론.

관계형 모델은 매우 범용적이고 유연하지만 데이터 또는 액세스 패턴의 구조를 활용할 수 없습니다. 데이터 구조는 데이터 및 액세스 방법에 대해 알고있을 때 유용합니다. 예를 들어, 데이터 구조에 넣은 마지막 데이터를 알고 있으면 스택을 사용할 수있는 첫 번째 데이터가됩니다.

관계형 데이터베이스를 메타 데이터 구조라고했습니다. 일반적으로 스택, 큐, 트리 및 목록과 같은 많은 데이터 구조를 사용하여 관계형 테이블의 추상 데이터 구조를 만드는 소프트웨어가 상당히 많기 때문입니다.


마지막 단락과 관련하여 "예쁜 비트 뭉치"가 무엇을 의미하는지에 대한 설명이 필요하십니까?
hulkmeister

@ hulkmeister, 죄송합니다. '비트'가 아닌 '큰'이어야합니다. 관계형 모델은 매우 추상적이고 상당히 복잡합니다. 실제로 적절하게 수행되는 구현, 특히 ACID ((원 자성, 일관성, 격리, 내구성)를 제공하는 구현을 제공하려면 매우 복잡한 코드가 필요합니다.
Charles E. Grant
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.