2017-12-17 14 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

あなたでし周りの効率的な検索操作を行うことができるようにそのデータをロードするために使用するデータ構造のデータが、永続化する方法/ではありません起動時にデータをメモリにロードし、2つのハッシュマップを持ちます:一方はHashMap<TheaterId, ArrayList<MovieId>>、他方はHashMap<MovieId, ArrayList<TheaterId>>です。そうすれば、どちらかの方法で見えるようになります。この方法の問題点は、定期的にデータベースの更新をチェックするか、更新が発生したときにデータベースが通知してデータ構造を更新できるようにすることです。しかし、あなたは並行性(ユーザーがそれを照会している間にデータを更新すること)を心配しなければならず、物事は急いで乱雑になる。

これは、データベースのためのものです。彼らはすでに同時更新とクエリを処理する方法を知っており、インデックスを正しく設定すると、ムービーまたは劇場で検索することができます。専用のデータベースサーバーを使用している場合、データベースは索引とデータをメモリーにキャッシュする可能性が高いため、検索が非常に高速になる可能性があります。

「データベースはデータを格納するためのものだと思っていますか?データベースは、データの格納、変換、操作、および取得用です。おそらくさらにいくつかのものがあります。

+0

私は都市ベースのフィルタリングのためだけにデータベースを使用する予定でした。すべての劇場映画は、特定の都市に対する1回のリクエストで取得できます。私が避けようとしていた問題は、同様のデータを持つ2つのハッシュマップを維持することでした。データベース側のみですべてのフィルタリングを行う方が良いように見えます –

関連する問題