2011-05-03 2 views
0

단일 데이터베이스 서버와 여러 응용 프로그램 서버로 응용 프로그램 서버를 저렴하고 쉽게 개발할 수 있지만 응용 프로그램 서버를 쉽게 추가 할 수는 있지만 데이터베이스를 확장하는 것은 어렵다고 가정합니다. 정렬해야하는 데이터베이스에서 일부 정보를 검색하려고한다고 가정합니다. 다른 모든 것들이 평등 해 지므로 응용 프로그램 서버를 정렬하는 것이 좋을 것 같습니다. 데이터베이스에서로드를 이동시켜 확장하기가 어렵 기 때문입니다.n 계층 아키텍처에서 데이터베이스 서버 또는 응용 프로그램 서버 정렬

  • 정렬은 올바른 결과 집합을 얻기 위해 필요하다 :

    지금 확실히 데이터베이스 서버에서 정렬하는 것은 생각할 필요도 없습니다하는 경우가 있습니다. 예를 들어, 어떤 기준에 따라 상위 N을 원한다면, 내가 원하는 행을 알기도 전에 분명히 정렬해야합니다. 애플리케이션 서버에서의 정렬은 여기서는 선택 사항이 아닙니다 (일반적으로 원하지 않는 전체 테이블을 빨아 들이기를 원하지 않는 한).

  • 내 정렬 순서를 지원하는 인덱스가 있습니다. 이 경우 데이터베이스 서버에서의 정렬은 기본적으로 무료입니다.

그러나 그 외에도 일반적으로 응용 프로그램 서버에서 정렬하는 것을 선호합니까? 위에 열거 된 것 외에도 고려해야 할 몇 가지 사례가 있습니까?

답변

2

본능은 데이터베이스 서버에서 데이터를 정렬하는 것입니다. 데이터 서버의 주요 기능 중 하나이기 때문에 매우 효율적입니다. 그러나 위험은 어쨌든 데이터가 클라이언트 수준에서 처리되어 프로세스를 낭비 할 수 있다는 것입니다.

데이터베이스 서버에 스트레스가 가중되면 데이터를 더 빨리 정렬 할 수 없으므로 더 큰 문제가 있습니다.

서버에서 실행되는 대부분의 쿼리가 최적화 된 경우 스키마가 이성적이고 인덱스가 제 위치에 있으면 데이터베이스 서버는 땀을 흘리지 않고도 막대한 양의 작업을 수행 할 수 있습니다.

+0

데이터베이스에는 개발자가 사용할 수없는 정렬 알고리즘이 없으므로 인덱스가없는 경우 (@Aaron이 특별히 가리키는 경우) 데이터를 정렬하는 것이 더 효율적이지 않습니다. – Elad

+0

알고리즘보다 정렬하는 것이 더 많지만, 요점을 이해합니다. 나는 애플리케이션 서버 쪽보다 클라이언트 쪽을 더 생각하고 있었다. – datagod

0

나는 당신이 옳다고 생각합니다. 인덱스가없는 경우 데이터베이스는 응용 프로그램 서버에서의 정렬보다 성능상의 이점이 없습니다. 사실, 앱 서버에서 어떤 정렬 알고리즘을 사용하는지 제어 할 수 있으므로, 원칙적으로 케이스에 적용되는 경우 퀵 정렬 대신 기수 정렬 (O (n) 시간)을 사용할 수 있습니다.

0

데이터가 자주 변경되지 않고 (데이터를 캐시하려는 경우) 가능한 결과 집합의 수가 제한되어 있으면 데이터베이스를 정렬하고 결과 집합을 캐시하거나 배열을 캐시 할 수 있습니다 결과 집합에 대한 키의 저장은 항상 같은 종류의 동일한 데이터를 수행해야합니다.

+0

흥미로운 점은 - 캐싱에 대해서는 생각하지 못했습니다 - 그렇지만 애플리케이션 서버를 정렬하고 캐시에 결과를 저장할 수는 없었습니까? 최소한 memcached와 같은 기술을 사용하면 데이터는 어쨌든 캐시되기 전에 앱 서버를 통과해야합니다. – Aaron

+0

물론, 데이터 사용 계획과 데이터 변경 빈도에 달려 있습니다 (tm). –

2

나는 PostgreSQL DBMS를 사용하여 내 경험으로 Jaimal의 의견을 보완 할 것이다. 대형 공유 버퍼 풀이 있고 정렬 성능에 대해 우려하는 진술을 준비 할 수 있으면 DBMS에서 "무료"로 고성능 캐시를 얻을 수 있습니다. 조회를 준비 할 수는 없지만 결과 세트에 필요한 속성을 제한 할 수있는 경우, 정렬 술어로 해당 속성에 대한 색인을 작성할 수 있습니다. 백엔드에서 이러한 최적화를 수행 할 수 없으면 응용 프로그램 서버에서 정렬이 잘 수행됩니다.

응용 프로그램과 DBMS의 정렬 성능 차이에 관해서는 응용 프로그램 언어가 개체 모델에 따라 약간의 오버 헤드가있을 것으로 예상됩니다. 예를 들어 1000000 개의 Ruby 객체를 1000000 개의 PostgreSQL 튜플로 정렬하면 데이터베이스가 더 빠르다는 것을 알 수 있습니다.

+0

내 데이터베이스 서버에 여전히 여분의 CPU가 있으면 응용 프로그램 서버 대신 정렬하여 전체 성능을 향상시킬 수 있습니다. DB 서버가 CPU 용량 근처에서 이미 실행되고있는 경우를 생각해 보았습니다.하지만 당신이 말하는 것은 의미가 있으며, 명심할 가치가 있습니다. – Aaron

관련 문제