2014-11-18 6 views
1

나는 Codeigniter에서 의미있는 URL 경로를 만들고 있는데, 어디에서와 같이 매개 변수로 조합하여 사용되는 5 개의 다른 테이블에서 데이터를 가져옵니다.동적, 의미 론적 URL 경로

helloworld.com/universe 
helloworld.com/universe/earth 
helloworld.com/universe/earth/australia 
helloworld.com/universe/earth/australia/melbourne 
helloworld.com/universe/earth/australia/melbourne/city 

여기서는 우주, 세계, 국가, 도시 및 지역 테이블에서 행을 가져옵니다. 그래서 helloworld.com/(universe)helloworld.com/universe1/(planet)에 대해 작성된 경로 등이 있습니다.

현재 데이터베이스가 우리의 routes.php 파일에있는 경로로 85000 페이지를 생성 중입니다. 나는 앞으로 몇 개월 동안 이것이 수백만으로 성장할 것으로 기대합니다.

현재로서는 성능이 좋지만 지속 가능한 방법입니까? 수백만 개의 경로가있는 파일을 사용하여 라우팅하는 경우 페이지로드시 성능에 영향을 줍니까?

+0

데이터베이스에 사용할 수있는 메모리 양과 테이블 색인이 제대로 작성되었는지 여부에 따라 달라집니다. 색인 생성은 수천 또는 수백만 개의 행이있을 때 매우 중요합니다. – Devon

+0

수백만 행이 표시되는 것은 데이터베이스가 아닙니다. 그것은 현재 비교적 작게 유지되어야합니다. 이것은 내가 염려하고있는 codeigniter routes 파일의 경로로 쓰여지는 행의 조합입니다. – pjmil

+0

아, 나는 codeigniter에 대해 많이 모른다. 또는 라우터가 어떻게 동작하는지에 대해서는 잘 모르겠다. – Devon

답변

2

라우트 수준 만 있다고 가정하면 routes.php의 줄 수를 크게 줄일 수 있습니다.

이 routes.php에

$route['universe/(.*)/(.*)/(.*)/(.*)'] = 'controller/function/$1/$2/$3/$4'; 
$route['universe/(.*)/(.*)/(.*)'] = 'controller/function/$1/$2/$3'; 
$route['universe/(.*)/(.*)/'] = 'controller/function/$1/$2'; 
$route['universe/(.*)'] = 'controller/function/$1'; 

이러한 추가 다음은 "아무것도"의미 정규식입니다 참조하는 방법은 다음과 같습니다 (*.). $ 1, $ 2, $ 3, $ 4 컨트롤러에서 함수의 매개 변수를 될 경우

는 URL helloworld.com/universe/earth/australia/melbourne/city를 들어

, 경로는 $route['universe/(.*)/(.*)/(.*)/(.*)']controller/function/$1/$2/$3/$4에 의지 경로를 고려할 것 .

여기에서 함수에서 매개 변수를 확인하고 이에 따라 계산을 수행 할 수 있습니다.

CodeIgniter는 최상위 우선 순위가 가장 높다고 가정하므로 경로가 그 순서대로되어 있는지 확인하십시오.

+0

문제는 URL에있는'universe' 세그먼트가 무엇이든 될 수 있고 이미 다른 것을 위해'$ route [ '(. *)']'를 사용하고 있다는 것입니다. 나는 그것을 언급하는 것을 잊었다, 미안. – pjmil

+0

나는 그것이 중요 할 것이라고 생각하지 않는다. 경로 상단에'$ route [(. *)/(. *)/(. *)/(. *) /] ​​'를 추가하면됩니다. 그리고 비슷한 논리가 도움이 될 것입니다. – vnay92

+0

'$ route [(. *)]'는 두 개의 다른 컨트롤러에있는 함수에 사용됩니다. 그것은 작동하지 않습니다. – pjmil