2011-07-28 3 views
0

현재 MVC 패턴을 사용하여 PHP 응용 프로그램을 작성 중입니다.권한을 캐싱하거나 각 요청에 대해 데이터베이스를 사용합니까?

응용 프로그램에서 역할 기반 액세스 제어 (RBAC)를 구현했습니다. 현재 사용자 priveleges는 약 7 개의 조인을 사용하여 결정된 다음 사용자 세션에서 캐시됩니다. 세션은 데이터베이스에 저장됩니다.

  • 모듈
  • 컨트롤러
  • 액션
  • 유형
  • 개체 ID
  • 상태 ID
:

privilges는 이러한 열을 포함하는 테이블로 상상 할 수 있습니다

권한, 모듈, 컨트롤러, 작업 및 상태 ID와 일치해야하는 경우 테이블의 정확한 항목과 일치해야하며 "개체 ID"는 "유형"에 따라 선택 사항입니다.

평균적으로 사용자 당 100 개의 권한을 가지므로 데이터베이스의 세션 변수에 캐시하고 캐시 된 결과를 구문 분석하기 위해 PHP의 배열 함수를 사용하는 것이 더 효율적입니까?

요청이있을 때마다 이러한 조인을 수행하고 해당 작업을 수행 할 수 있는지 여부를 결정하는 것이 더 효율적입니까?

건배 :)

답변

2

가능성이 있습니다 (캐시 공간이 모두 사용되면이 서버가 임시 테이블을 사용하게 때문에) 사용자 또는 파마를 많이 가지고 특히, 속도가 느려집니다 합류했다.

권한이 거의 변경되지 않으면 세션 기간 동안 세션에 고정해야합니다. 또한 권한을 시간 초과하여 매시간 또는 원하는 경우 언제든지 확인하여 절충안을 제공 할 수 있습니다. 당신은 매우 편집증이나 파마를 자주 변경하면 다른 한편으로

는, (예를 들면, 여기에 유래에) 솔루션은 실제이 조인하도록 조인의 결과를 저장하기 위해 계산 된 테이블보기를 사용하는 것입니다 액세스가 아니라 변화에 따라 계산됩니다. DB에 의존하는 또 다른 옵션은 트리거를 사용하여 소스 테이블이 변경 될 때마다 다시 계산되는 권한의 "계산 된"버전을 유지 보수하는 것입니다.

그런데 배열로 serialize를 사용하여 텍스트로 변환 할 것입니다.

+0

답장을 보내 주셔서 감사합니다 :) permitions은 그렇게 많이 변경하지 않아도됩니다. 따라서 PHP 배열 함수와 루프를 사용하여 특권을 처리하는 것이 SQl을 사용하여 특권을 처리하는 것보다 훨씬 빠르다는 말입니까? – F21

+0

꽤 많이 있습니다. 물론 프로필 (이 테이블과 권한이 실제로 어떻게 생겼는지 모르겠다. 그래서 내가하는 말대로 진행할 것이다.)은 여러 조인에 대해 PHP 루프가 대부분의 경우 쉽게 이기게된다. – Sajid

+0

도움 주셔서 감사합니다 :) – F21

관련 문제