2009-03-29 4 views
4

우리는 GDBM 키 - 값 데이터베이스를 C++로 구현 된로드 균형 조정 웹 응용 프로그램의 백엔드로 사용합니다. 응용 프로그램에서 제공하는 데이터가 매우 커져서 관리자가 GDBM 파일을 웹 서버의 "로컬"저장소에서 또는 공유 메모리에있는 NFS 마운트 파일 시스템으로 이동했습니다.GDBM의 대체 또는 보조자

이것은 성능에 영향을줍니다. 우리의 성능 테스트 (테스트 환경에서)는 페이지로드 시간이 수백 밀리 초 (로컬 디스크의 경우)에서 몇 초 (NFS, 로컬 네트워크를 통해)로 점프하고 때로는 30 초까지 올라간다는 것을 보여줍니다. 문제의 큰 부분은 애플리케이션이 GDBM 파일에서 무작위로 많은 읽음을 만들어 내고 NFS를 통해 속도가 느려지므로 프론트 엔드와 백엔드가 더 많은 네트워크 하드웨어가 필요함) 그리고 데이터베이스가 커짐에 따라

중요한 응용 프로그램은 아니지만 성능을 향상시키고 응용 프로그램 개발자 및 Unix 관리자를 포함한 일부 리소스를 사용할 수 있습니다. 나의 주된 제약은 단지 몇 주 동안 자원을 가지고있는 시간이다. 내가보기로

, 내 옵션은 다음과 같습니다

  1. 는 조정 매개 변수에 의해 NFS 성능을 향상시킬 수 있습니다. 필자의 본능은 이것에서 벗어나지 못하지만 이전에는 잘못 알고 있었고 NFS 튜닝에 대해서는 잘 모릅니다.

  2. 다른 키 - 값 데이터베이스 (예 : memcachedb 또는 Tokyo Cabinet)로 이동하십시오.

  3. NFS를 다른 프로토콜로 바꾸십시오 (iSCSI는 언급되었지만 익숙하지 않습니다).

이 문제는 어떻게 해결해야합니까?

답변

9

"관계 대 비 관계"비교에 너무 신경 쓰지 마십시오. 이 문제와 관련이없는 것 같습니다.

로컬 고속 파일 저장소의 작은 데이터베이스에서 의 응용 프로그램이 교차 한 행은 네트워크을 통해 액세스되는 큰 데이터베이스까지 다릅니다. 이 회선을 통과하면 전용 네트워크 서비스 데이터베이스 관리 시스템이 더 효율적으로 제공된다는 의미입니다. 관리 서버가 관계형 데이터베이스를 관리하는지 여부는 해당 측면과 관련이 없습니다.

MySQL을 설치하고 빠르게 실행하려면 MySQL을 사용하는 것이 가장 좋습니다. 그것이 현재의 위치를 ​​훨씬 넘어서게 될 것으로 예상된다면 결국 PostgreSQL에 넣을 수 있습니다. 따라서 결국에는 결국 이동해야합니다 :-)

2

이것은 듣고 싶은 것 같지는 않지만 솔직히 내가 너라면 mysql 테이블에 던지겠다. GDBM-over-NFS와는 달리, 작업하는 것이 의미심장하게 더 어려워지는 것과 같지 않으며 많은 이점을 얻습니다. 실제로 상황을 고려한 원격 액세스 프로토콜은 아닙니다.

1

비 관계형 데이터베이스를 사용하려면 BDB 또는 DJB의 CDB입니다. 지금까지 두 가지를 모두 사용해 왔지만 성능면에서 GDBM보다 우수하다고 생각합니다.

하지만 나도 병목 현상이 당신이 사용하고있는 데이터 구조 (GDBM)가 아니라 인프라라고 생각하기 때문에 명심하십시오.

0

네트워크상의 플랫 파일을 사용하는 파일 시스템 입출력은 좋은 생각이 아니지만 입출력, 쿼리 등을 만드는 멀티 스레드 TCP 서버 작성을 고려해야합니다. 그런 다음 그 결과를 다시 돌려줍니다. 데이터의 작은 덩어리 전체 db 파일을 전송 ..

난 고 가용성 문제를 극복하기 위해 캐시 - 지속성 메커니즘을 설계하고 있습니다. 나는 그것을 파이썬으로 코딩합니다.

관련 문제