OpenLDAP의 내부 자료 구조는 버클리 DB의 hash와 btree를 사용합니다.
즉, 버클리 DB를 직접 접근하는 속도 보다 당연히 느립니다.
또한 버클리 DB에서 hash일 경우는 그 key만 바로 fetch하는 경우라면,
(SQL에서 하나의 레코드만 Primary key 검색으로 가져오는 것과 비교할 수 있겠지요)
제가 알기로는 현재 Unix 계열의
자료를 무한대로 입력할 수 있는 데이터베이스 시스템 가운데,
제일 빠릅니다. (mysql 보다도 빠릅니다)
문제는 btree인데, 전산학 시간에 배운 대로 btree의 문제점이,
자료 insert, update, delete 에서 자료가 많아지면 많아질수록
속도가 꽤 느려진다는 것이겠지요.
하지만, btree의 key의 완벽히 일치하는 검색, (sql의 like가 아닌 = 비교)
일 경우는 당연히 엄청난 속도로 처리해 냅니다.
이때, 물론 mysql의 ISAM 방식 인덱싱보다는 느립니다.
또한 PostgreSQL이나, Oracle의 쉐어메모리를 사용하는 RDBMS의
검색 속도보다도 느립니다.
문제는 필터에서 cn=*a* 이런식의 무지막지한 검색을 하는 경우라면,
몇십만건이 아니라, 몇천건만 되어도 속도는 엄청나게 떨어지겠지요.
왜냐하면, 내부적으로 버클리 DB를 사용하니까. -.-
(DBM 프로그래밍을 해 보신 분이라면 쉽게 이해를 하실듯)
버클리 DB가 아직도 사용되는 이유는 위에서 이야기한
hash에서의 엄청난 속도 뿐만 아니라,
시스템 사용률에서도 다른 데이터베이스 시스템과는 비교도 안될 정도로
낮은 사용률을 자랑하기 때문입니다.
이것때문에 아마 OpenLDAP에서 버클리 DB를 사용하는 것이 아닐까 생각이 듭니다.
이와같이 아랫분이 언급하신 것처럼,
속도 문제가 아니라, 아주 많은 쿼리에도 충분히 견뎌낼 수 있다!
이것에 촛점을 맞추셔야할 것같습니다.
아래 글 가운데, "OpenLDAP에 대한 잡생각" 이야기가 바로 이부분에 대한
이야기였습니다.
|