문제

우리는 a가 있습니다 GDBM C ++로 구현 된로드 균형 잡힌 웹 경제 애플리케이션으로의 백엔드로서 키 값 데이터베이스. 응용 프로그램이 제공하는 데이터는 매우 커 졌으므로 관리자는 GDBM 파일을 "로컬"스토리지 (웹 서버 또는 매우 가까운)에서 크고 공유 원격 NFS 장착 파일 시스템으로 이동했습니다.

이것은 성능에 영향을 미쳤습니다. 우리의 성능 테스트 (테스트 환경에서)는 페이지로드 시간이 수백 밀리 초 (로컬 디스크)에서 몇 초 (NFS, 로컬 네트워크)로 점프하고 때로는 30 초 정도 증가하는 것을 보여줍니다. 문제의 큰 부분은 응용 프로그램이 GDBM 파일에서 많은 무작위로 읽히고 NFS보다 느리게 진행되며 이는 생산에서 더욱 악화 될 것입니다 (프론트 엔드와 백엔드에서도 심지어도 그들 사이에 더 많은 네트워크 하드웨어)와 데이터베이스가 더 커질수록 더 커집니다.

이것은 중요한 응용 프로그램은 아니지만 성능을 향상시키고 응용 프로그램 개발자 시간 및 UNIX 관리자를 포함한 몇 가지 리소스를 사용할 수 있습니다. 내 주요 제약 조건은 시간이 몇 주 동안 만 리소스 만 있다는 것입니다.

내가 알 수 있듯이 내 옵션은 다음과 같습니다.

  1. 매개 변수를 조정하여 NFS 성능을 향상시킵니다. 나의 본능은 우리는 이것에서 많이 빠지지 않을 것이지만, 나는 전에 틀렸다. 그리고 나는 NFS 튜닝에 대해 크게 잘 모른다.

  2. 다른 키 값 데이터베이스로 이동하십시오 memcachedb 또는 도쿄 캐비닛.

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

이 문제에 어떻게 접근해야합니까?

도움이 되었습니까?

해결책

"관계형 대 비 관계형"비교에 너무 매달리지 마십시오. 이 문제와 관련이없는 것 같습니다.

응용 프로그램이 교차 한 선은 다릅니다. 로컬 빠른 파일 스토리지의 작은 데이터베이스에서 네트워크를 통해 액세스하는 대형 데이터베이스까지. 이 라인을 건너면 이제 전용 네트워크 서비스 데이터베이스 관리 시스템에 의해 더 나은 서비스를 제공한다는 것을 의미합니다. 관리 서버가 관계형 데이터베이스를 관리하는지 여부는 해당 측면과 관련이 없습니다.

그것을 얻고 빨리 실행하기 위해 마리 아드 (MySQL의 후임자)는 아마도 최선의 방법 일 것입니다. 당신이 지금 어디에있는 곳을 넘어서 자라면, 당신은 그것을 넣을 수도 있습니다. PostgreSQL 그것이 결국 어쨌든 갈 필요가 있기 때문에 :-)

다른 팁

이것은 당신이 듣고 싶은 것이 아닌 것 같습니다. 그러나 솔직히 말해서, 내가 당신이라면 나는 그것을 MySQL 테이블에 던질 것입니다. 마치 작업하기가 더 어렵지는 않으며, GDBM-Over-NFS와 달리 실제로 상황에 맞는 원격 액세스 프로토콜뿐만 아니라 많은 이점을 얻을 수 있습니다.

비 관계형 데이터베이스를 고수하려면 시도 할 수 있습니다. BDB 또는 DJB CDB. 나는 지금까지 모두 사용해 왔으며 성능에 관해서는 GDBM을 능가한다고 생각합니다.

그러나 Bignose의 답변을 명심하십시오. 저도 병목 현상이 사용중인 데이터 구조 (GDBM)가 아니라 인프라가 될 수 있다고 생각하십시오.

파일 시스템 I/O 네트워크에 플랫 파일이있는 파일 시스템 I/O는 좋은 생각이 아니지만 I/O, 쿼리 등을 만드는 다중 스레드 TCP 서버를 작성하는 것을 고려해야합니다. 그 기계에서 결과를 다시 반환합니다. 전체 DB 파일이 아닌 작은 데이터 덩어리를 전송합니다 ..

높은 구역화 성 문제를 극복하기 위해 캐시 페서리스트 메커니즘을 설계하고 있습니다. 파이썬으로 코딩 할 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top