非常に大きなセット (たとえば 100 万以上) の "タスク" のセットがあり、それぞれが小さな "リソース" のセットを必要としているとします (非常に大きなセットから約 10 個、たとえば 10,000 以上)。
「リソース」のサンプル セット (ここでも約 10) を取得するクエリを実行し、これらのリソースを使用するすべてのタスクを検索したいと考えています。最終的には、次のような「タスク」に対してより複雑なクエリを実行したいと考えています。
- 自分よりも多くの「リソース」を必要とする「タスク」はどれですか?
- 特定の「タスク」と「リソース リスト」との距離はどれくらいですか?
この問題は、いくつかの点で Web 検索と非常によく似ていると思います。「タスク」は Web ページであり、「リソース」はそれらのページ上の単語です。並列問題では、「これらの単語が与えられた場合、それらを含むすべての Web ページを特定の回数表示する」などのクエリを実行したいと考えています。
私が知る限り、この問題は通常のデータベース (そして NoSQL データベースでさえも!) には適していません。「リソース」のリストは拡張可能である必要があるため、従来のデータベースの列にすることはできません。それらの数も多いため、10,000 列のデータベースを作成するのは正しくないようです。
私が想像していたのは、すべてのデータをメモリに保持し、順番に検索することでした。しかし、それはおそらくあまりスケーラブルではなく、電源が失われるとすべてのデータが失われます...
このような問題を解決する方法についてのガイダンスが欲しいです!