2017-12-17 4 views
-3

사용자가 특정 도시의 영화/극장을 검색 한 다음 영화를 예약 할 수있는 온라인 영화 티켓 예약 시스템을 설계하려고합니다. 그가 영화를 검색했다면 그 영화의 모든 공연 시간과 함께 해당 영화를 반환해야합니다. 마찬가지로 극장을 검색하는 경우 해당 극장에서 모든 영화가있는 극장을 상영 시간과 함께 반환해야합니다. 사용자가 검색하는 영화 나 극장인지 알 수있는 방법이 없습니다. 효율적인 검색을 위해 사용해야하는 데이터 구조는 무엇입니까? 여기에 내가 생각한 것이있다. 그러나 그것은 무차별적인 접근 방법 인 것처럼 보인다. 여기영화관 양방향 검색 기능을위한 데이터 구조

public class Theater { 
    String theaterName; 
    ArrayList<Movies> movies; 
} 

은 가정하자 내가 ArrayList를로 극장을 저장 내 수업 (부분 구조), 나는 영화 이름을 가진 이후에이 극장을 분석하고 극장 이름으로 문자열 비교를하고 끝낼 것입니다.

편집가 : 혼동을 피하기 위해, 문제는 여기서 내가

+0

데이터베이스는 데이터를 저장하기위한 것입니다. 효율적인 검색 작업을 위해 어떤 데이터 구조를 초기화해야하는지 알고 싶습니다. –

+0

@RaviChaudhary, 'HashMap','HashSet'과 같은 해시 기반 데이터 구조를 살펴 봅니다. 그들은'O (1)'을 줄 것입니다. – Andrew

+0

@AndrewTobilko :'HashMap' 또는'HashSet'을 사용하면 내 키가 영화 나 극장이 될 것입니다. 아니면 당신이 검색하고자하는 것을 식별하기 위해'HashMap

답변

2

당신 주위 효율적인 검색 작업을 할 수 있도록 해당 데이터를로드하는 데 사용하는 데이터 구조의 데이터 만을 유지하는 방법/아니다 시작할 때 데이터를 메모리에로드하고 두 개의 해시 맵 즉, 하나는 HashMap<TheaterId, ArrayList<MovieId>>이고 다른 하나는 HashMap<MovieId, ArrayList<TheaterId>>입니다. 그렇게하면 어느쪽으로 든 볼 수 있습니다. 이 접근 방식의 문제점은 데이터베이스를 주기적으로 업데이트 확인해야하거나 데이터 구조를 업데이트 할 수 있도록 업데이트가 발생할 때 데이터베이스에서 사용자에게 알리도록해야한다는 것입니다. 그러나 동시성 (사용자가 쿼리하는 동안 데이터 업데이트)에 대해 걱정해야하며, 작업이 번거 롭습니다.

그게 바로 데이터베이스입니다. 그들은 동시 업데이트 및 쿼리를 처리하는 방법을 이미 알고 있으며 인덱스를 올바르게 설정하면 영화 또는 극장에서 검색 할 수 있습니다. 전용 데이터베이스 서버를 사용하는 경우 데이터베이스는 인덱스와 데이터를 메모리에 많이 저장하므로 검색 속도가 매우 빨라질 수 있습니다.

"데이터베이스는 데이터를 저장하기위한 용도"라고 생각하면 많은 것을 배울 수 있습니다. 데이터베이스는 데이터를 저장, 변환, 조작 및 검색하기위한 것입니다. 그리고 아마도 몇 가지 더 있습니다.

+0

도시 기반 필터링 전용 데이터베이스를 사용할 계획이었습니다. 모든 영화 - 특정 도시에 대한 단일 요청으로 영화를 가져올 수 있습니다. 내가 피하려고했던 문제는 비슷한 데이터를 가진 두 개의 해시 맵을 유지하는 것이 었습니다. 데이터베이스 측에서만 모든 필터링을 수행하는 것이 좋습니다. –